如何通过JSON_ARRAYAGG函数在MySQL中将多行JSON数据合并成单一JSON数组?

2026-05-07 12:250阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计714个文字,预计阅读时间需要3分钟。

如何通过JSON_ARRAYAGG函数在MySQL中将多行JSON数据合并成单一JSON数组?

如果您在查询结果中遇到`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分钟。

如何通过JSON_ARRAYAGG函数在MySQL中将多行JSON数据合并成单一JSON数组?

如果您在查询结果中遇到`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 数组”。

阅读全文