如何解决通过与Postgresql中的其他一些列分组将多个JSONArray行变成一行
我有一个查询select * from table
的视图,该查询返回了以下数据
我想按名称相同的名称列进行分组,并合并如下所述的JSONArray列
解决方法
一种方法是取消嵌套数组,然后将它们聚合回去:
select t.id,t.name,jsonb_agg(a.e)
from the_table t
cross join lateral jsonb_array_elements(t.json_array) as a(e)
group by t.id,t.name;
如果您经常执行此操作,则自定义聚合会使其更易于使用(但可能不会更快)
create function jsonb_array_combine(p_one jsonb,p_two jsonb)
returns jsonb
as
$$
select jsonb_agg(e)
from (
select e
from jsonb_array_elements(p_one) as o(e)
union all
select e
from jsonb_array_elements(p_two) as t(e)
) t
$$
language sql
immutable;
create aggregate jsonb_array_agg(jsonb)
(
SFUNC = jsonb_array_combine(jsonb,jsonb),STYPE = jsonb
);
然后您可以像这样使用它:
select t.id,jsonb_array_agg(t.json_array)
from the_table t
group by t.id,t.name;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。