MySQL JSON_ARRAYAGG() 函数使用指南
MySQL JSON_ARRAYAGG()
函数将指定的列或者表达式的值聚合为一个 JSON 数组。
JSON_ARRAYAGG()
语法
这里是 MySQL JSON_ARRAYAGG()
函数的语法:
JSON_ARRAYAGG(expr)
我们通常在 MySQL 中按如下方式使用 JSON_ARRAYAGG()
函数:
SELECT JSON_ARRAYAGG(expr), ...
FROM table_name
[WHERE ...]
[GROUP BY group_expr1, group_expr2, ...];
参数
expr
- 必须的。它可以是一个列名,也可以是一个表达式。
返回值
MySQL JSON_ARRAYAGG(expr)
函数返回一个 JSON 数组,它聚合了所有符合条件的值。
如果结果集没有任何行,此函数将返回 NULL
。
JSON_ARRAYAGG()
示例
我们将通过 student_score
表进行演示。
首先,让我们使用如下语句创建表 student_score
:
DROP TABLE IF EXISTS `student_score`;
CREATE TABLE `student_score` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`subject` VARCHAR(255) NOT NULL,
`score` INT NOT NULL
);
这里我们创建了表用于存储学生的成绩,这个表有 4 个列组成:
id
是主键name
是学生的名字subject
是学生的科目score
是学生的成绩
其次,让我插入一些数据用于演示:
INSERT INTO `student_score` (`name`, `subject`, `score`)
VALUES
('Tom', 'Math', 80),
('Tom', 'English', 90),
('Tim', 'English', 98);
以下是表中的数据:
+----+------+---------+-------+
| id | name | subject | score |
+----+------+---------+-------+
| 1 | Tom | Math | 80 |
| 2 | Tom | English | 90 |
| 3 | Tim | English | 98 |
+----+------+---------+-------+
现在,我们可以使用 JSON_ARRAYAGG()
函数获取每个人参加的考试科目的列表,如下:
SELECT
name AS `Name`,
JSON_ARRAYAGG(subject) AS `Subjects`
FROM student_score
GROUP BY name;
+------+---------------------+
| Name | Subjects |
+------+---------------------+
| Tim | ["English"] |
| Tom | ["Math", "English"] |
+------+---------------------+
这里,我们知道了 Tom 参加了 Math 和 English 两门考试 ,而 Tim 只参加了 English 考试。