MySQL GROUP_CONCAT函数的使用

定义和用法
在有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 的返回值类型是 VARCHARVARBINARY; 否则是 TEXTBLOB.

二. 实例

表数据如下
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                 |
 -------------------------- 

参考自
简书作者: deniro
CSDN作者: 那些乐趣

你可能感兴趣的:(Mysql,mysql,sql,数据库)