一个聚合函数,在
group
语句中使用,可以将多行的字符串按分组整合成一个字符串,注意:使用
GROUP_CONCAT()
函数必须对源数据进行分组,否则所有数据会被合并成一行
例子:
SELECT id,group_concat(dept SEPARATOR ',') FROM table_a GROUP BY dept;
SELECT GROUP_CONCAT(CONCAT('\'',ENIN_NAME,'\'')) FROM sys_c_en_entityinfo;
SELECT t.names AS '姓名',GROUP_CONCAT(t.course_name ORDER BY t.course_name SEPARATOR ',') AS '课程' FROM course t GROUP BY t.names
使用案例:
用户每月数据都是单行的,一年的数据为12条,需要将12条数据存为
[0,0,0,0,0...]
这样的结构。
SELECT CONCAT('[', GROUP_CONCAT(s.df2 SEPARATOR ','), ']') df2
FROM (SELECT b.year_m, IF(b.year_m > DATE_FORMAT(NOW(),'%Y%m'),0,sum(IF(a.df2 IS NULL, 0, a.df2))over(ORDER BY b.year_m)) df2
FROM (SELECT date_format(s.slsj, '%Y%m') slsj, count(*) df2
FROM yhhx_dfgmg s
WHERE s.yhbh = a.yhbh
AND s.ywlb != '投诉'
AND substr(s.slsj, 1, 4) = date_format(now(), '%Y')
GROUP BY date_format(s.slsj, '%Y%m')) a
RIGHT JOIN demo_ny b
ON a.slsj = b.year_m) s
结果:
[1,2,3,4,5,6,7,8,9,0,11,12]
注意:
GROUP_CONCAT
函数默认的最大可连接字符串的长度是
1024
,如果连接的字符串长度超过
1024
的话会被截断,不过我们可以通过设置
group_concat_max_len
的值来修改
GROUP_CONCAT
的最大长度。
-- 查看长度
SELECT @@global.group_concat_max_len;
-- 设置长度
SET GLOBAL group_concat_max_len=999999;
SET SESSION group_concat_max_len=999999;