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位44294967295
64位418446744073709551615

如果 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作者: 那些乐趣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值