定义和用法 在有
GROUP BY的查询语句中, 将要连接的字段中所有非NULL的字符串合并在一起. 语法GROUP_CONCAT([DISTINCT] 要连接的字段 [ORDER BY ASC/DESC 排序字段] [SEPARATOR '分隔符'])可以使用DISTINCT过滤重复值 可以使用ORDER BY ASC/DESC对值进行排序 可以使用SEPARATOR指定分隔符,默认以,为分隔符
一. 最大值限制
GROUP_CONCAT() 是有最大长度限制的,默认值是1024,超出部分将会丢失.
可以通过 group_concat_max_len 参数进行动态设置.
设置语法:SET [GLOBAL | SESSION] group_concat_max_len = val;
其中 val 是一个无符号整数,最大值与版本位数有关:
| 版本 | 最小值 | 最大值 |
|---|---|---|
| 32位 | 4 | 4294967295 |
| 64位 | 4 | 18446744073709551615 |
如果 group_concat_max_len 的值被设置为小等于 512,那么 GROUP_CONCAT 的返回值类型是 VARCHAR 或 VARBINARY; 否则是 TEXT 或 BLOB.
二. 实例
表数据如下
select * from test;
------------
| id | name |
------------
| 1 | 10 |
| 1 | 10 |
| 1 | 15 |
| 2 | 25 |
| 2 | 30 |
| 3 | 90 |
------------
使用 GROUP_CONCAT() 函数查询
select id, GROUP_CONCAT(name) from test GROUP BY id;
--------------------------
| id | GROUP_CONCAT(name) |
--------------------------
| 1 | 10,10,15 |
| 2 | 25,30 |
| 3 | 90 |
--------------------------
使用 GROUP_CONCAT(SEPARATOR '分隔符') 函数查询
select id, GROUP_CONCAT(name SEPARATOR ' ') from test GROUP BY id;
--------------------------
| id | GROUP_CONCAT(name) |
--------------------------
| 1 | 10 10 15 |
| 2 | 25 30 |
| 3 | 90 |
--------------------------
使用 GROUP_CONCAT(DISTINCT 要连接的字段) 函数查询
select id, GROUP_CONCAT(DISTINCT name) from test GROUP BY id;
--------------------------
| id | GROUP_CONCAT(name) |
--------------------------
| 1 | 10,15 |
| 2 | 25,30 |
| 3 | 90 |
--------------------------
使用 GROUP_CONCAT(ORDER BY ASC/DESC 排序字段) 函数查询
select id, GROUP_CONCAT(DISTINCT name ORDER BY name DESC) from test GROUP BY id;
--------------------------
| id | GROUP_CONCAT(name) |
--------------------------
| 1 | 15,10,10 |
| 2 | 30,25 |
| 3 | 90 |
--------------------------