GROUP_CONCAT
将分组内文本合并展示
简介
GROUP_CONCAT 将每个分组中的非 NULL 文本合并为一个字符串,可在函数内部指定 DISTINCT、ORDER BY 和 SEPARATOR。若不指定排序,拼接顺序没有稳定保证;长结果还会受到 MySQL group_concat_max_len 限制,不能把它当成无限容量的数据交换格式。
基础语法
SELECT department, GROUP_CONCAT(name) AS names FROM orders GROUP BY department;
示例
GROUP_CONCAT 示例
示例按 department 分组并拼接姓名;生产写法应在 GROUP_CONCAT 内增加 ORDER BY,使输出顺序可重复。
示例数据表
表名:
orders| name | department |
|---|---|
| Alice | Sales |
| Bob | IT |
| Cindy | Sales |
| David | HR |
运行结果
| department | names |
|---|---|
| HR | David |
| IT | Bob |
| Sales | Alice,Cindy |
常见问题
怎样保证 GROUP_CONCAT 内部顺序?
在函数内部明确写 ORDER BY;查询末尾的 ORDER BY 只控制结果行顺序,不控制每组字符串的拼接顺序。
拼接结果为什么可能被截断?
MySQL 受 group_concat_max_len 限制;生产环境应检查当前上限,并避免用超长字符串代替规范的明细结果。
GROUP_CONCAT 会怎样处理 NULL?
NULL 输入通常被忽略;如果一组全部为 NULL,结果为 NULL,可按业务需要配合 COALESCE。
标签
这篇内容是否清楚?
感谢反馈,我们会把它用于后续内容复核。