当前位置: 首页 > news >正文

Json_agg函数

以下是 array_aggjson_agg 和 jsonb_agg 的具体使用示例。

准备示例数据

假设有一个员工表 employees

sql
CREATE TABLE employees (id INT,dept_id INT,name TEXT
);INSERT INTO employees VALUES
(1, 101, '张三'),
(2, 101, '李四'),
(3, 102, '王五'),
(4, 102, '赵六'),
(5, 102, '孙七');

1. array_agg —— 聚合成 PostgreSQL 数组

sql
SELECT dept_id,array_agg(name) AS names_array
FROM employees
GROUP BY dept_id;

结果:

 
dept_idnames_array
101 {张三,李四}
102 {王五,赵六,孙七}
  • 返回的是 PostgreSQL 的一维数组类型(text[]),可以用数组下标访问,例如 names_array[1] 得到“张三”。

2. json_agg —— 聚合成 JSON 数组

sql
SELECT dept_id,json_agg(name) AS names_json
FROM employees
GROUP BY dept_id;

结果:

 
dept_idnames_json
101 ["张三", "李四"]
102 ["王五", "赵六", "孙七"]
  • 返回类型为 json,是一个标准的 JSON 数组格式。

3. jsonb_agg —— 聚合成 JSONB 数组

sql
SELECT dept_id,jsonb_agg(name) AS names_jsonb
FROM employees
GROUP BY dept_id;

结果:

 
dept_idnames_jsonb
101 ["张三", "李四"]
102 ["王五", "赵六", "孙七"]
  • 返回类型为 jsonb,输出内容与 json_agg 看起来类似,但内部存储为二进制格式,支持更高效的查询和索引,并且会移除重复的键(但此处是简单字符串数组,所以没有区别)。


补充:聚合整行记录为 JSON

这三个函数不仅可以聚合单个列,也可以聚合整行(或指定结构):

sql
SELECT dept_id,json_agg(employees) AS full_rows
FROM employees
GROUP BY dept_id;

这会将每个部门的员工记录以 JSON 对象的形式聚合到一个 JSON 数组中,每个对象包含 iddept_idname 字段。

 
 
这会将每个部门的员工记录以 JSON 对象的形式聚合到一个 JSON 数组中,每个对象包含 id、dept_id、name 字段。举例
 
 
 

好的,下面以 employees 表为例,展示如何将每个部门的整行记录聚合成一个 JSON 数组,数组中的每个元素都是一个包含 iddept_idname 字段的 JSON 对象。

示例:聚合整行记录为 JSON 数组

sql
SELECTdept_id,json_agg(employees) AS employees_json
FROM employees
GROUP BY dept_id;

执行结果:

 
dept_idemployees_json
101 [{"id":1,"dept_id":101,"name":"张三"}, {"id":2,"dept_id":101,"name":"李四"}]
102 [{"id":3,"dept_id":102,"name":"王五"}, {"id":4,"dept_id":102,"name":"赵六"}, {"id":5,"dept_id":102,"name":"孙七"}]
  • json_agg(employees) 将 employees 表的整行(所有列)转换为 JSON 对象,然后按部门分组聚合为 JSON 数组。

  • 每个 JSON 对象的键就是列名,值就是对应行的数据。


更灵活的构建:使用 json_build_object

如果你只想包含部分字段,或者想自定义键名,可以用 json_build_object 配合 json_agg

sql
SELECTdept_id,json_agg(json_build_object('emp_id', id,'emp_name', name)) AS employees_json
FROM employees
GROUP BY dept_id;

结果:

 
dept_idemployees_json
101 [{"emp_id":1,"emp_name":"张三"}, {"emp_id":2,"emp_name":"李四"}]
102 [{"emp_id":3,"emp_name":"王五"}, {"emp_id":4,"emp_name":"赵六"}, {"emp_id":5,"emp_name":"孙七"}]

 

http://www.jsqmd.com/news/439741/

相关文章:

  • 2026最新十大图片购买网站盘点:高清商用素材、买图平台与无侵权素材网推荐 - 品牌2026
  • 2026年中国离婚房产律师电话查询推荐:全国范围服务概览 - 十大品牌推荐
  • 2026年深圳继承纠纷律师电话查询推荐:高效解决途径介绍 - 十大品牌推荐
  • 2026年硕士论文AI率15%标准怎么达标?踩了3次坑后的经验 - 我要发一区
  • 剪辑师与UP主必看:2026年度十大影视剪辑及延时视频素材网站推荐指南 - 品牌2026
  • 2026年免考硕士机构推荐报告:品睿教育兼顾专业性与实战性 - 深度智识库
  • 旺旺大礼包推荐|新春年货零食礼包怎么选?性价比高、种类多、超值装、家庭装、送同事送小朋友全解析 - Top品牌推荐官
  • 2026最新干货:十大免费图片素材下载网站推荐,高清、版权免费图库合集 - 品牌2026
  • 2026国产芯片封装设计软件在高端存储芯片领域的落地实践与推荐 - 品牌2026
  • 2026年上海离婚律师电话查询推荐:专业团队与联系途径 - 十大品牌推荐
  • 2026年DeepSeek写的论文AI率98%怎么办?用这个方法10分钟搞定 - 我要发一区
  • 商用图片素材版权无忧:2026最新十大高清正版网站推荐,超安心不侵权 - 品牌2026
  • 使用C#/.NET8 从零开始搭建微服务项目(三)—————— 配置Swagger文档
  • 2026年论文AI率太高怎么办?这5款降AI率工具亲测有效 - 我要发一区
  • 2026年北京子女抚养权律师电话查询推荐:权威名录与沟通建议 - 十大品牌推荐
  • 2026年中国离婚财产律师电话查询推荐:核心律师资源一览 - 十大品牌推荐
  • 2026年3月高压电机绝缘监测公司最新推荐,高压设备绝缘安全保障 - 品牌鉴赏师
  • 2026年中国离婚房产律师电话查询推荐:高效解决房产分割难题 - 十大品牌推荐
  • 为什么 PHP 闭包要加 static?
  • 2026年上海子女抚养权律师电话查询推荐:资深律师团队精选 - 十大品牌推荐
  • 2026年DeepSeek写论文AIGC检测不通过?这3款降AI工具实测推荐 - 我要发一区
  • 2026年中国离婚财产律师电话查询推荐:权威名录与联系指引 - 十大品牌推荐
  • 2026年天津婚姻纠纷律所电话查询推荐:专业律所盘点与联系指引 - 十大品牌推荐
  • 2026年3月厦门岛内搬家公司推荐,专业服务与品牌保障口碑之选 - 品牌鉴赏师
  • 性能提升百倍/Qt地图组件纯QWidget绘制/缓存瓦片技术/多线程加载绘制
  • 2026年上海离婚律师电话查询推荐:五大律师详细联系信息 - 十大品牌推荐
  • 2026年AI率从92%降到5%,我是这样一步步做到的 - 我要发一区
  • openclaw的记忆机制
  • 清洁度检测分析仪排行更新,苏州西恩士工业有限公司位居行业前三 - 工业设备研究社
  • 2026年北京离婚房产律师电话查询推荐:五大律师联系方式汇总 - 十大品牌推荐