PostgreSQL按字段分组生成指定JSON格式结果的技术问题
PostgreSQL按字段分组生成嵌套JSON数组
你需要先按a字段分组,将每个分组内的b值聚合为数组,再转换为JSON结构,以下是正确的查询语句:
SELECT array_to_json(array_agg(row_to_json(t))) FROM ( SELECT a, array_agg(b) AS b FROM t1 GROUP BY a ) t;
逻辑说明
- 内层子查询:通过
GROUP BY a对数据按a分组,使用array_agg(b)将每个分组中的b值合并为一个数组,得到形如(1, [1,2])、(2, [7,8,9])的分组结果 row_to_json(t)将每个分组的行数据转换为JSON对象,例如{"a":1, "b":[1,2]}- 外层通过
array_agg将所有JSON对象聚合为数组,再用array_to_json转换为最终的JSON数组输出
执行后会得到你期望的结果:
[{"a":1,"b":[1,2]},{"a":2,"b":[7,8,9]}]
原查询问题分析
你之前的查询没有做分组操作,只是直接将每条(a,b)记录转换为JSON后聚合,因此得到的是每条独立记录的JSON数组,没有实现按a分组聚合b的需求。
内容的提问来源于stack exchange,提问作者mvk859017
相关产品推荐
相关产品推荐

