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
时,如果字符串包含分隔符,则几乎不可能在以后区分这些部分。
答案 0 :(得分:1)
从MySQL 5.7.22开始,可以使用JSON_ARRAYAGG
和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_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)
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)