【MySQL】MySQL如何合并多行数据,行转列,group_concat 多行合并

一个聚合函数,在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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值