GROUP_CONCAT函数可将分组多行合并为单字符串,默认以逗号连接,支持自定义分隔符、去重和排序,如SELECT article_id, GROUP_CONCAT(tag SEPARATOR ' | ') FROM article_tags GROUP BY article_id; 并可通过SET SESSION group_concat_max_len调整长度限制以防截断。

在MySQL中,GROUP_CONCAT 是一个非常实用的聚合函数,它可以将分组中的多行文本合并成一个字符串。当你需要将某个字段的多个值拼接在一起时,比如把一个用户的所有标签、订单项或类别连成一行显示,这个函数就特别有用。
基本语法
GROUP_CONCAT(expression SEPARATOR separator)
- expression:要拼接的字段或表达式
- SEPARATOR:指定连接符,默认是逗号 ','
例如,有一个文章标签表:
article_id | tag -----------|-------- 1 | MySQL 1 | Database 2 | Python 2 | Web
你想按文章ID汇总所有标签:
SELECT article_id, GROUP_CONCAT(tag) AS tagsFROM article_tags
GROUP BY article_id;
结果会是:
article_id | tags -----------|------------------- 1 | MySQL,Database 2 | Python,Web
自定义分隔符
你可以使用 SEPARATOR 指定其他连接符号:
SELECT article_id, GROUP_CONCAT(tag SEPARATOR ' | ') AS tagsFROM article_tags
GROUP BY article_id;
输出:
1 | MySQL | Database 2 | Python | Web
去重与排序
如果数据中有重复值,可以用 DISTINCT 去重:
SELECT article_id, GROUP_CONCAT(DISTINCT tag ORDER BY tag) AS tagsFROM article_tags
GROUP BY article_id;
- DISTINCT 避免重复标签
- ORDER BY 控制拼接顺序
处理长文本截断问题
GROUP_CONCAT 有长度限制,默认是 1024 字符。如果拼接内容太长,会被截断。
可以通过设置系统变量来扩大上限:
SET SESSION group_concat_max_len = 10000;建议在查询前设置,避免影响全局配置。
基本上就这些。GROUP_CONCAT 简单但强大,适合报表汇总、导出数据等场景,合理使用能让查询结果更直观。










