跳到主要内容

JSON_OBJECTAGG

描述

该函数将两个列名或表达式作为参数,第一个用作键,第二个用作值,并返回包含键值对的 JSON 对象。

语法

JSON_OBJECTAGG(key, value) [over_clause]

说明

key, value 表示键值对。如果结果不包含行,或者出现错误,则返回 NULL。如果任何键名称为 NULL 或参数数量不等于 2,则会发生错误。

根据 JSON 文本的要求,对象中不能存在重复的键值,所以重复的键值会被删除。由于聚合操作机制 是逐行处理结果集,所以最后一个重复键的值会被保留,而 SELECT 语句 返回的数据行可能是无序的,所以最后哪个 value 被保留,取决于返回数据的顺序。

提示

该函数暂不支持窗口函数,即 OVER 子句。

示例

SELECT oid, JSON_OBJECTAGG(attr, value) AS attributes FROM tbl1 GROUP BY oid;
+------+---------------------------------------+
| oid | attributes |
+------+---------------------------------------+
| 2 | {"color": "red", "fabric": "silk"} |
| 3 | {"color": "green", "shape": "square"} |
+------+---------------------------------------+
2 rows in set (0.001 sec)

CREATE TABLE tbl2(c VARCHAR(10), i INT);
Query OK, 0 rows affected (0.000 sec)

INSERT INTO tbl2 VALUES ('key', 3), ('key', 4), ('key', 5);
Query OK, 3 rows affected (0.000 sec)
Records: 3 Duplicates: 0 Warnings: 0

SELECT c, i FROM tbl2;
+------+------+
| c | i |
+------+------+
| key | 3 |
| key | 4 |
| key | 5 |
+------+------+
3 rows in set (0.001 sec)

SELECT JSON_OBJECTAGG(c, i) FROM tbl2;
+----------------------+
| JSON_OBJECTAGG(c, i) |
+----------------------+
| {"key": 5} |
+----------------------+
1 row in set (0.001 sec)