目录

MySQL JSON_OBJECTAGG() 函数使用指南

MySQLJSON_OBJECTAGG()函数将由第一个参数作为键和第二个参数作为值的键值对聚合为一个JSON对象。JSON_OBJECTAGG()语法这里是MySQLJSON_OBJECTAGG()函数的语法:JSON_OBJECTAGG(key_expr,value_expr)我们通常在MySQ

MySQL JSON_OBJECTAGG() 函数将由第一个参数作为键和第二个参数作为值的键值对聚合为一个 JSON 对象。

JSON_OBJECTAGG() 语法

这里是 MySQL JSON_OBJECTAGG() 函数的语法:

JSON_OBJECTAGG(key_expr, value_expr)

我们通常在 MySQL 中按如下方式使用 JSON_OBJECTAGG() 函数:

SELECT JSON_OBJECTAGG(key_expr, value_expr), ...
FROM table_name
[WHERE ...]
[GROUP BY group_expr1, group_expr2, ...];

参数

key_expr
必须的。它的值作为结果对象中的键值对中的键。它可以是一个列名,也可以是一个表达式。
value_expr
可选的。它的值作为结果对象中的键值对中的值。它可以是一个列名,也可以是一个表达式。

返回值

MySQL JSON_OBJECTAGG() 函数返回一个 JSON 对象,其中的键值对中的键是 key_expr 的值,值是 value_expr 的值。

如果存在重复的键,则只保留最后一个键作为键值对,其他重复的键值对都被丢弃。

如果结果集没有任何行,此函数将返回 NULL

JSON_OBJECTAGG() 示例

我们将通过 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_OBJECTAGG() 函数获取每个人考试成绩,如下:

SELECT
    name AS `Name`,
    JSON_OBJECTAGG(subject, score) AS `Scores`
FROM student_score
GROUP BY name;
+------+-----------------------------+
| Name | Scores                      |
+------+-----------------------------+
| Tim  | {"English": 98}             |
| Tom  | {"Math": 80, "English": 90} |
+------+-----------------------------+

这里,在结果集中的 Scores 列的值是 JSON 对象。 对于 Tim 来说,由于他只参加了一门考试,因此 JSON 对象中只有一个键值对。 对于 Tom 来说,由于他参加了两门考试,因此 JSON 对象中有两个键值对。