如何通过JSON_ARRAYAGG函数在MySQL中将多行JSON数据合并成单一JSON数组?
- 内容介绍
- 文章标签
- 相关推荐
本文共计714个文字,预计阅读时间需要3分钟。
如果您在查询结果中遇到`NULL`和`JSON_ARRAYAGG`,这通常意味着查询返回了空的结果集。下面是对这种情况的简单解释:
常见做法是用 WHERE 过滤掉空值,或者用 IFNULL / COALESCE 替换:
SELECT JSON_ARRAYAGG( JSON_OBJECT('id', id, 'name', name) ) FROM users WHERE id IS NOT NULL AND name IS NOT NULL;
如果必须保留行但不想让 NULL 进数组,得先转换——比如用 IF(id IS NULL, NULL, JSON_OBJECT(...)) 再配合 WHERE ... IS NOT NULL 二次过滤。
JSON_ARRAYAGG 必须配合 GROUP BY,否则默认聚合成一行
单独写 SELECT JSON_ARRAYAGG(json_col) FROM table 是合法的,但它把整张表所有行压成一个数组。多数时候你其实想按某个维度分组聚合,比如“每个 category 对应一个 JSON 数组”。
本文共计714个文字,预计阅读时间需要3分钟。
如果您在查询结果中遇到`NULL`和`JSON_ARRAYAGG`,这通常意味着查询返回了空的结果集。下面是对这种情况的简单解释:
常见做法是用 WHERE 过滤掉空值,或者用 IFNULL / COALESCE 替换:
SELECT JSON_ARRAYAGG( JSON_OBJECT('id', id, 'name', name) ) FROM users WHERE id IS NOT NULL AND name IS NOT NULL;
如果必须保留行但不想让 NULL 进数组,得先转换——比如用 IF(id IS NULL, NULL, JSON_OBJECT(...)) 再配合 WHERE ... IS NOT NULL 二次过滤。
JSON_ARRAYAGG 必须配合 GROUP BY,否则默认聚合成一行
单独写 SELECT JSON_ARRAYAGG(json_col) FROM table 是合法的,但它把整张表所有行压成一个数组。多数时候你其实想按某个维度分组聚合,比如“每个 category 对应一个 JSON 数组”。

