【问题标题】:looking for "Sum and combine" json columns寻找“求和并结合”json 列
【发布时间】:2021-12-30 07:49:28
【问题描述】:

在 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是一个“合并和求和”函数

提前感谢您的任何想法

迪迪尔

【问题讨论】:

    标签: json postgresql


    【解决方案1】:

    使用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}
    

    【讨论】:

    • 非常感谢,随着一步一步的解释,它使您的回答更加有价值,我将能够在此基础上再接再厉。再次感谢,我希望我能接受你的回答作为一个很好的答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多