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

请解释JSON_ARRAYAGG与JSON_ARRAY的核心差异、示例及适用场景

JSON_ARRAY与JSON_ARRAYAGG的核心差异(通俗版)

本质区别

  • JSON_ARRAY是「单条记录的打包工具」:你给它几个值(字段、常量都行),它就把这些值拼成一个JSON数组,每条输入记录对应一条带数组的输出记录,不会合并多条数据。
  • JSON_ARRAYAGG是「多行数据的聚合工具」:它会把查询结果中多行的某个字段值,合并成一个大的JSON数组,多行输入对应一行(或按分组的每行)输出。

实战示例(以MySQL为例)

假设我们有一张users表,数据如下:

idnamedepartment
1Alice研发部
2Bob市场部
3Charlie研发部
4David市场部

1. JSON_ARRAY的用法

需求:把每个用户的ID、姓名、部门打包成一个JSON数组

SELECT id, name, JSON_ARRAY(id, name, department) AS user_info
FROM users;

输出结果:

idnamedepartmentuser_info
1Alice研发部[1, "Alice", "研发部"]
2Bob市场部[2, "Bob", "市场部"]
3Charlie研发部[3, "Charlie", "研发部"]
4David市场部[4, "David", "市场部"]

可以看到,每条用户记录都生成了独立的数组,完全是单条记录内部的打包。

2. JSON_ARRAYAGG的用法

场景1:按部门分组,汇总每个部门的成员姓名

SELECT department, JSON_ARRAYAGG(name) AS department_members
FROM users
GROUP BY department;

输出结果:

departmentdepartment_members
研发部["Alice", "Charlie"]
市场部["Bob", "David"]

这里把同一部门的多行姓名,合并成了一个数组,是跨记录的聚合操作。

场景2:汇总所有用户的姓名成一个数组

SELECT JSON_ARRAYAGG(name) AS all_users
FROM users;

输出结果:

all_users
["Alice", "Bob", "Charlie", "David"]

直接把整个表的name字段值,聚合为一个单独的JSON数组。

适用场景

  • JSON_ARRAY适合:

    • 需要把单条记录里的多个字段/常量组合成JSON数组,比如接口返回时把用户的基础信息打包成一个字段;
    • 构造固定结构的JSON数组常量(比如JSON_ARRAY(1,2,3)直接生成[1,2,3])。
  • JSON_ARRAYAGG适合:

    • 按分组统计某类数据的集合,比如每个班级的学生名单、每个订单的商品列表;
    • 需要把查询结果的某一列整体打包成一个数组返回,比如获取系统所有用户的ID列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:11:08