我试试这个
select created_at,
sum((json_array_elements(shipping_lines::json) ->> 'price')::float) as shipping_price
from t1
group by 1
显示错误:
错误:聚合函数调用不能包含返回集合的函数调用第5行:sum(((json数组元素(航运行::json)-〉〉'价格')...^提示:可以将返回集合的函数移到LATERAL FROM项中。
如何使用Lateral From修复此问题?我阅读了this PsSQL docs,但并不真正了解Lateral函数
3条答案
按热度按时间ovfsdjhp1#
这将是:
或者,您可以在横向连接本身中计算
sum()
,这样就不需要外部聚合(假设created_at
在开始的表中是唯一的):注意,我稍微修改了查询,使用
jsonb
代替json
:这种新的数据类型比json
更灵活、更高效(即使它在这里不会产生真实的的差异,但只要有选择,它应该是首选)。zf2sa74q2#
嗯,把逻辑移到
from
子句:rbpvctlc3#
一种选择是稍后使用公用表表达式执行此操作。
例如:
非常类似于上面的答案,但更容易阅读海事组织。