在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_table
CTE为例,首先"规范化"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}