Tom*_*Tom 11 sql arrays postgresql json lateral-join
我试试这个
select created_at,
sum((json_array_elements(shipping_lines::json) ->> 'price')::float) as shipping_price
from t1
group by 1
Run Code Online (Sandbox Code Playgroud)
它显示错误:
错误:聚合函数调用不能包含设置返回函数调用第 5 行:sum(((json_array_elements(shipping_lines::json) ->> 'price')... ^ 提示:您也许可以移动设置返回函数进入 LATERAL FROM 项目。
如何使用 Lateral From 解决这个问题?我读了这个 PsSQL 文档,但并没有真正理解横向功能
那将是:
select t1.created_at, sum((x.obj->>'price')::float) as shipping_price
from t1
left join lateral jsonb_array_element(t1.shipping_lines::jsonb) as x(obj) on true
group by 1
Run Code Online (Sandbox Code Playgroud)
或者,您可以计算sum()横向连接本身,这避免了外部聚合的需要(假设它created_at在表中是唯一的):
select t1.created_at, x.shipping_price
from t1
cross join lateral (
select sum((x.obj->>'price')::float) as shipping_price
from jsonb_array_elements(t1.shipping_lines::jsonb) as x(obj)
) x
Run Code Online (Sandbox Code Playgroud)
请注意,我稍微更改了要使用的查询,jsonb而不是json:这种新数据类型更加灵活和高效json(即使它不会在这里产生真正的区别,只要有选择,它就应该是首选)。
| 归档时间: |
|
| 查看次数: |
9915 次 |
| 最近记录: |