如何在mysql中使用GROUP_CONCAT聚合文本

来源:这里教程网 时间:2026-02-28 20:18:43 作者:

在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 tags
FROM article_tags
GROUP BY article_id;

结果会是:

article_id | tags
-----------|-------------------
1          | MySQL,Database
2          | Python,Web

自定义分隔符

你可以使用 SEPARATOR 指定其他连接符号:

SELECT article_id, GROUP_CONCAT(tag SEPARATOR ' | ') AS tags
FROM article_tags
GROUP BY article_id;

输出:

1 | MySQL | Database
2 | Python | Web

去重与排序

如果数据中有重复值,可以用 DISTINCT 去重:

SELECT article_id, GROUP_CONCAT(DISTINCT tag ORDER BY tag) AS tags
FROM article_tags
GROUP BY article_id;
DISTINCT 避免重复标签 ORDER BY 控制拼接顺序

处理长文本截断问题

GROUP_CONCAT 有长度限制,默认是 1024 字符。如果拼接内容太长,会被截断。

可以通过设置系统变量来扩大上限:

SET SESSION group_concat_max_len = 10000;

建议在查询前设置,避免影响全局配置。

基本上就这些。GROUP_CONCAT 简单但强大,适合报表汇总、导出数据等场景,合理使用能让查询结果更直观。

相关推荐