Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过与postgresql中的其他列分组,将多个JSONArray行变成一行_Postgresql_Aggregate Functions - Fatal编程技术网

通过与postgresql中的其他列分组,将多个JSONArray行变成一行

通过与postgresql中的其他列分组,将多个JSONArray行变成一行,postgresql,aggregate-functions,Postgresql,Aggregate Functions,我有一个来自查询select*fromtable的视图,它返回以下数据 我想按同名的name列进行分组,并合并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; 如果您经常这样做,自定

我有一个来自查询
select*fromtable
的视图,它返回以下数据

我想按同名的name列进行分组,并合并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;

如果您经常这样做,自定义聚合会让用户更容易(但可能不会更快)

然后你可以这样使用它:

select t.id, t.name, jsonb_array_agg(t.json_array)
from the_table t
group by t.id, t.name;

样本数据最好显示为(例如,希望帮助您的人可以复制和粘贴样本数据)。有关如何创建美观的表的一些提示,请参阅。您不能在该视图中已经进行所需的聚合吗?不使用函数可以实现吗?@JohnsonAnthony,这是第一个编写的solution@AkhileshMishra是的,我现在注意到了。@a_horse_,没有名字,它按照第一个解决方案中提到的那样工作。在这种情况下,使用
jsonb_agg(a.e->>“rollnumber”的a.e订单)
而不是
jsonb\U agg(a.e)
select t.id, t.name, jsonb_array_agg(t.json_array)
from the_table t
group by t.id, t.name;