如何使用其他列类型聚合Postgres中的Jsonb列

时间:2018-09-04 06:20:56

标签: sql postgresql jsonb

我在postgres表中有以下数据,

enter image description here

其中data是jsonb列。我想得到的结果是

[
 {field_type: "Design", briefings_count: 1, meetings_count: 13}, 
 {field_type: "Engineering", briefings_count: 1, meetings_count: 13}, 
 {field_type: "Data Science", briefings_count: 0, meetings_count: 3}
]

2 个答案:

答案 0 :(得分:1)

说明

使用jsonb_each_text函数从名为jsonb的{​​{1}}列中提取数据。然后使用data汇总行,以为每个不同的GROUP BY获得一行。对于每种汇总,我们还需要包括会议和简报计数,这可以通过用case语句选择最大值来完成,以便您可以为不同的计数创建两个单独的列。最重要的是,如果缺少某些信息,则应用field_type函数以返回coalesce而不是0-在您的示例中,这将是Data Science的简介。

在更高层次的陈述中,现在我们将结果作为具有字段的表来保存,我们需要构建NULL对象并将它们全部聚集到一行。为此,我们使用了jsonb,其中传递的对包括:字段名称+值。这给我们带来了3行数据,每行数据都有一个单独的jsonb_build_object列。由于我们在输出中只需要一行(汇总的json),因此我们需要在此之上应用jsonb。这为我们带来了您想要的结果。

代码

检查 LIVE DEMO 以查看其工作原理。

jsonb_agg

答案 1 :(得分:0)

您可以像这样聚合列,然后将数据插入到另一个表中

select array_agg(data)
from the_table

或使用内置的json函数之一创建新的json数组。例如jsonb_agg(expression)