MySQL JSON可聚合函数

时间:2017-01-27 13:41:23

标签: mysql json

MySQL自5.7版本以来有一些基本的JSON支持,但是我一直在浏览文档但是找不到任何JSON可聚合函数。

MySQL 5.7 +中是否有任何JSON聚合函数?

例如,如果您有查询:

SELECT id, GROUP_CONCAT(name) FROM given_names GROUP BY id

你得到的结果如下:

id | name
1  | Jon,Smith
2  | Hubert,Blaine,Wolfeschlegelsteinhausenbergerdorff
....

是否有相同的方法来获取JSON数组?

我担心的是正确转义字符串,因为当你使用GROUP_CONCAT时,如果字符串包含分隔符,则几乎不可能在以后区分这些部分。

1 个答案:

答案 0 :(得分:1)

从MySQL 5.7.22开始,可以使用JSON_ARRAYAGGJSON_OBJECTAGG。来自文档的示例:

JSON_ARRAYAGG

mysql> SELECT o_id, attribute, value FROM t3;
+------+-----------+--------+
| o_id | attribute | value  |
+------+-----------+--------+
|    2 | color     | red    |
|    2 | fabric    | silk   |
|    3 | color     | green  |
|    3 | shape     | square |
+------+-----------+--------+
4 rows in set (0.00 sec)

mysql> SELECT o_id, JSON_ARRAYAGG(attribute) AS attributes 
       FROM t3 GROUP BY o_id;
+------+---------------------+
| o_id | attributes          |
+------+---------------------+
|    2 | ["color", "fabric"] |
|    3 | ["color", "shape"]  |
+------+---------------------+
2 rows in set (0.00 sec)

JSON_OBJECTAGG

mysql> SELECT o_id, attribute, value FROM t3;
+------+-----------+--------+
| o_id | attribute | value  |
+------+-----------+--------+
|    2 | color     | red    |
|    2 | fabric    | silk   |
|    3 | color     | green  |
|    3 | shape     | square |
+------+-----------+--------+
4 rows in set (0.00 sec)

mysql> SELECT o_id, JSON_OBJECTAGG(attribute, value)
       FROM t3 GROUP BY o_id;
+------+---------------------------------------+
| o_id | JSON_OBJECTAGG(attribute, value)      |
+------+---------------------------------------+
|    2 | {"color": "red", "fabric": "silk"}    |
|    3 | {"color": "green", "shape": "square"} |
+------+---------------------------------------+
2 rows in set (0.00 sec)