定义和用法
在有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 |
--------------------------