mysql 分组后将某列的值合并成一行

July 24, 2019

有这么个表

ID NAME
1 张三
1 李四
2 王五
2 小六

要得到以下结果:

ID NAME
1 张三,李四
2 王五,小六

SQL:

1
select t.id,GROUP_CONCAT(t.name SEPARATOR ',') from t group by t.id;

注意 GROUP_CONCAT 中只有一个参数,是一个完整字符串。

假如要在分组中根据某个条件进行过滤,比如原表

ID NAME AGE
1 张三 18
1 李四 25
1 王五 28
2 小六 18
2 小七 22

要得到以下结果:

ID <20的NAME >20的NAME
1 张三 李四,王五
2 小六 小七

SQL:

1
2
3
4
5
6
select 
    t.id,
    GROUP_CONCAT(CASE WHEN t.age < 20 THEN t.name END SEPARATOR ',' ) ,
    GROUP_CONCAT(CASE WHEN t.age > 20 THEN t.name END SEPARATOR ',' ) 
from t 
group by t.id;