查找"Sum and combine" JSON 列



在PostgreSql中,我在文档中找不到一个函数可以允许我组合n个json实体,同时在现有键/值对的情况下求和值部分

英语不是我的主要语言,我怀疑我不知道如何使用正确的术语进行搜索

换句话说,

从具有2列的表

name      data 
'didier'  {'vinyl': 2, 'cd': 3)
'Anne'    {'cd' : 1, 'tape' : 4} 
'Pierre'  {'cd' : 1, 'tape': 9, 'mp3':2}

我想产生以下结果:

{ 'vinyl' : 2, 'cd' : 5, 'tape':13, mp3 : 2}

With是一个";合并并求和";功能

提前感谢的任何想法

Didier

the_tableCTE为例,首先"规范化"data列,然后按项类型(k(求和,最后聚合到一个JSONB对象中。

with the_table("name", data) as 
(
values
('didier',  '{"vinyl": 2, "cd": 3}'::jsonb),
('Anne',    '{"cd" : 1, "tape" : 4}'), 
('Pierre',  '{"cd" : 1, "tape": 9, "mp3":2}')
)
select jsonb_object_agg(k, v) from 
(
select lat.k, sum((lat.v)::integer) v 
from the_table 
cross join lateral jsonb_each(data) as lat(k, v)
group by lat.k
) t;
-- {"cd": 5, "mp3": 2, "tape": 13, "vinyl": 2}

最新更新