【MySQL】MySQL如何合併多行資料,行轉列,group_concat 多行合併

eureka52hz發表於2020-11-26

一個聚合函式,在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的最大長度。

SET SESSION group_concat_max_len= 99999;

相關文章