PostgreSQL中合并JSON实体并对重复键值求和的实现方法咨询
解决PostgreSQL中合并多个JSON对象并对相同键值求和的问题
嘿,这个需求完全可以通过PostgreSQL原生的JSON函数组合实现,不用找专门的合并求和函数,我给你直接上解决方案和细节解释~
核心思路
我们需要先把每个JSON对象拆成单独的键值对行,按键分组求和,最后再重新聚合成一个完整的JSON对象。
具体SQL实现
假设你的表名为music_collection(如果不是,替换成你实际的表名即可):
如果data列是json类型
SELECT json_object_agg(key, sum(value::numeric)) AS aggregated_data FROM music_collection, json_each_text(data);
如果data列是jsonb类型(PostgreSQL推荐使用,性能更优)
SELECT jsonb_object_agg(key, sum(value::numeric)) AS aggregated_data FROM music_collection, jsonb_each_text(data);
代码逐段解释
json_each_text(data)/jsonb_each_text(data):把每行的JSON对象拆分成多行记录,每行包含一个key(比如vinyl、cd)和对应的value(字符串格式的数字)sum(value::numeric):将字符串类型的value转换为数值后,按key分组求和json_object_agg(...)/jsonb_object_agg(...):把分组后的键和求和结果重新聚合为一个完整的JSON对象
结果验证
用你提供的示例数据运行上述SQL,会精准得到你想要的结果:{"vinyl": 2, "cd": 5, "tape": 13, "mp3": 2}
内容的提问来源于stack exchange,提问作者Didiergm
相关产品推荐
相关产品推荐

