千家信息网

MySQL拼接字符串函数GROUP_CONCAT详解

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,上一篇文章 跨表更新,看到自己写的SQL像个憨憨写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance
千家信息网最后更新 2025年11月10日MySQL拼接字符串函数GROUP_CONCAT详解

上一篇文章 跨表更新,看到自己写的SQL像个憨憨写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 馮大馮二 也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5

新需求来了,静悄悄的来了!!! 领导想要查看每个 performance 下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要得到下面的结果:

要将结果集中某个指定的列进行字符串拼接,这要怎么做呢?主角闪亮✨登场

GROUP_CONCAT(expr)

在 Mysql 官方文档 中,该函数被放在聚合函数章节,如果你要按照指定字段分组拼接,就要配合关键字 GROUP BY 来使用的

定义

该函数返回一个字符串结果,该字符串结果是通过分组串联的非NULL值。如果没有非NULL值,则返回NULL。完整语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]       [ORDER BY {unsigned_integer | col_name | expr}         [ASC | DESC] [,col_name ...]]       [SEPARATOR str_val])

What? 这个语法看着太复杂了吧,别着急,下面会用例子慢慢说明逐一验证滴

使用案例

先完成文章开头的需求:

SELECT performance, GROUP_CONCAT(employee_name) AS employeesFROM employeesGROUP BY performance;

zou是这个结果:

到这里,领导给过来的需求就完成了😜

客官请留步,您点的菜还没上完呢......

我们是国际化的团队,我们的家乡遍布五湖四海

领导想关怀一下员工,要查看公司全部员工的家乡都有哪些地方。员工们可能来自同一个地方,所以要将结果集去重复,DISTINCT 关键字就派上用场了

SELECT GROUP_CONCAT(DISTINCT home_town)FROM employees;

来看结果:

领导的关怀遍布五湖四海啊......

文案要改了,领导的关怀是遍布四海五湖的, 那么 ORDER BY 关键字就派上用场了

SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC) AS '领导关怀地区'FROM employees;-- 没我这么起变量的哈,还是汉语,我看你是疯了

这里你看到 GROUP_CONCAT 函数拼接字符串默认的分隔符是逗号 ,, 领导不开心,逗号么的感情,要用❕才能体现出关怀的强烈, SEPARATOR 关键字就派上用场了

分组拼接的值之间默认分隔符是逗号(,)。要明确指定分隔符,需要使用 SEPARATOR 关键字,紧跟其后的是你想设置的分隔符。要完全消除分隔符,就在 SEPARATOR 关键字后面写 '' 就好了
SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC SEPARATOR '!') AS '领导关怀地区'FROM employees;

SELECT GROUP_CONCAT(DISTINCT home_town SEPARATOR '') AS '领导关怀地区'FROM employees;

这关怀到位了吧,你品,你细品!!!

领导的关怀能力也有限,拼接的字符串默认的最大长度是1024个字符,可以通过下面语句查看当前限制是多少:

show variables like 'group_concat_max_len';

领导的能力可是飘忽不定的,所以我们可以灵活的设置这个值

SET [GLOBAL | SESSION] group_concat_max_len = val;

SESSION: 在当前对话中生效 GLOBAL:全局都生效

该语句在执行后,MySQL重启之前一直有作用,一旦重启 MySQL,则会恢复默认值

有时候 GROUP_CONCAT() 还要搭配 CONCAT_WS() 发挥出一点点威力,举个简单的例子

将消费者的名和姓用逗号进行分隔,然后再用 ; 进行分隔
SELECT  GROUP_CONCAT(    CONCAT_WS(', ', contactLastName, contactFirstName)    SEPARATOR ';')FROM  customers;

这里是 CONCAT_WS()函数用法, 很简单,请自行查看吧......

注意⚠️

GROUP_CONCAT()函数返回单个字符串,而不是值列表。这意味着我们不能在 IN 运算符中使用GROUP_CONCAT()函数的结果,例如,在子查询中, 像这样:

SELECT  id, nameFROM  table_nameWHERE  id IN GROUP_CONCAT(id);

总结

在许多情况下,我们都可以应用GROUP_CONCAT()函数产生出有用的结果,同时也可以结合其他函数发挥出更大的威力. 单招学会了,就要学会连招 combo 了

函数 结果 关怀 字符 字符串 关键 关键字 分隔符 逗号 员工 四海 地区 用场 需求 领导关怀 五湖 分组 五湖四海 例子 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 dcs网络安全 和平精英主播服务器叫什么 qq群发 软件开发 扬州特色服务联想服务器维修电话 车载网络技术的发展前景 三级数据库考什么 软件开发先进个人主要事迹 河北维蓝软件开发有限公司 贵州网络安全技能竞赛答题 什么是网络安全照片 云服务器安全维护流畅运行 数字化智慧校园软件开发 央企新型信息基础网络安全 万方数据库破解版 数据库的图片怎样在前端输出 中华人民共和国网络安全法图文 预约服务软件开发 杭州富阳区软件开发 中国中央网络安全信息网 oracle专用服务器 数据库填入序列数 高速公路服务器晚上能休息吗 西安网络安全就业前景 机房数据库涉及领域 每个平台买个服务器都可以备案吗 简便易行互联网科技公司 世界上第一次网络安全大赛 jsp技术访问数据库步骤 芜湖安卓软件开发一般要多少钱 数据库报错469
0