在MySQL中,group_concat(expr) 函数是聚合函数,用于将分组中的多个字符串连接成一个字符串,即返回分组内所有值的连接字符串(默认‘,’分割)。
| 功能 | 语法 |
|---|---|
| 基础分组合并 | SELECT group_column, GROUP_CONCAT(column) FROM table GROUP BY group_column |
| 自定义分隔符 | SELECT GROUP_CONCAT(column SEPARATOR '分隔符') FROM table |
| 去重合并 | SELECT GROUP_CONCAT(DISTINCT column) FROM table |
| 排序后合并 | SELECT GROUP_CONCAT(column ORDER BY sort_column DESC) FROM table |
| 多字段组合 | SELECT GROUP_CONCAT(CONCAT(col1, '(', col2, ')')) FROM table |
我们先准备一张dotcpp_users表格:

然后分别实操group_concat()函数:
1. 基础分组合并:表里有10个Dotcpp编程用户,有两个性别男、女,我们可以按照性别分组,收集不同的名字。
select group_concat(nickname) from dotcpp_users group by gender;
其查询结果如下:

2. 自定义分隔符:表里有10个Dotcpp编程用户,我们想要收集所有人的个性签名,并通过‘|’进行分割。
select group_concat(signature separator '|') from dotcpp_users;

3. 去重合并:表里有10个Dotcpp编程用户,每个用户都有自己的个性签名,我们想知道所有用户的个性签名是什么。由于存在重复签名,所以我们可以去重后再查询。
select group_concat(distinct signature) from dotcpp_users;

4. 排序后合并:表里有10个Dotcpp编程用户,目前表格是按升序排序,我想要(desc)降序排序然后查看所有人的昵称:
select group_concat(nickname order by id_code desc) from dotcpp_users;

5. 多字段组合:表里有10个Dotcpp编程用户,首先先进行男女分组,然后组合昵称和签名这两个字段,比如dotcpp_user1(coding)。
select gender, group_concat(concat(nickname, '(', signature, ')'))
from dotcpp_users
group by gender;
总结:在MySQL中,我们可以通过group_concat()函数将分组内的多个值连接成一个字符串。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程