我在postgres表中有以下数据,
其中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}
]
答案 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)