PostgreSQL中如何将多列值作为JSONB对象的键构建目标JSON结构
PostgreSQL中如何将多列值作为JSONB对象的键构建目标JSON结构
你遇到的问题很典型——当前用JSONB_AGG生成的是包含多个独立JSON对象的数组,而你需要的是把每个分组内的name作为键、numbers作为值,合并成一个单一的JSONB对象。
解决这个问题的关键是用JSONB_OBJECT_AGG函数,它专门用来将分组后的键值对聚合为一个JSONB对象,正好匹配你的需求。
直接修改你的查询代码即可:
WITH data (type, name, numbers) AS ( VALUES ('good', 'A', ARRAY [1,2,3]), ('good', 'B', ARRAY [5]), ('bad', 'C', ARRAY [8,9]) ) SELECT type, JSONB_OBJECT_AGG(name, numbers) AS things FROM data GROUP BY type;
执行这个查询后,你会得到预期的结果:
- 对于
type='good',things字段的值是:
{"A": [1, 2, 3], "B": [5]}
- 对于
type='bad',things字段的值是:
{"C": [8, 9]}
简单解释下JSONB_OBJECT_AGG的作用:它接受两个参数,第一个参数是要作为JSON对象键的字段(这里是name),第二个参数是对应键的值(这里是numbers),分组后会自动把同一组内的所有键值对合并成一个完整的JSONB对象,完全符合你想要的结构。
备注:内容来源于stack exchange,提问作者Franta
相关产品推荐
相关产品推荐

