You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何将关联查询的指定列转换为JSONB对象?

PostgreSQL 实现两种JSONB数组转换方案

针对你的需求,我们可以利用PostgreSQL的JSON聚合函数,基于原内连接查询进行分组聚合,实现两种不同结构的JSONB列:

方案1:单对象嵌套数组([{"城市名":"人口数",...}])

使用jsonb_object_agg将城市和人口聚合为一个键值对对象,再用jsonb_build_array将该对象包裹为数组:

SELECT
  t1.id,
  t1.label,
  jsonb_build_array(jsonb_object_agg(t2.city, t2.ppl)) AS city_population
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.country_id
GROUP BY t1.id, t1.label;

说明

  • jsonb_object_agg(t2.city, t2.ppl):将每个国家对应的所有城市-人口转换为一个JSON对象,键为城市名,值为人口数
  • jsonb_build_array(...):将上述对象包裹成一个单元素数组,匹配你要求的[{"城市名":"人口数",...}]结构

方案2:多对象数组([{"city":"城市名", "ppl":"人口数"},...])

使用jsonb_build_object构造单个城市-人口对象,再用jsonb_agg将这些对象聚合为数组:

SELECT
  t1.id,
  t1.label,
  jsonb_agg(jsonb_build_object('city', t2.city, 'ppl', t2.ppl)) AS city_population
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.country_id
GROUP BY t1.id, t1.label;

说明

  • jsonb_build_object('city', t2.city, 'ppl', t2.ppl):为每一行城市数据构造一个包含city和ppl键的JSON对象
  • jsonb_agg(...):将同一国家的所有城市对象聚合为一个JSON数组,匹配你要求的[{"city":"城市名", "ppl":"人口数"},...]结构

注意:如果存在城市名重复的情况,jsonb_object_agg会保留最后一条重复城市的数据;若需要处理重复值,可以先通过DISTINCT或者分组去重后再聚合。

内容的提问来源于stack exchange,提问作者toch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:52:45