好嘞 👍 阿杰,我来帮你整理一份 MySQL 中 GROUP_CONCAT()
函数用法总结,这也是一个很常见、很实用的函数:
MySQL GROUP_CONCAT()
用法总结
1. 基本概念
GROUP_CONCAT()
是 MySQL 提供的一个 聚合函数。- 作用:将某个分组内的多行值,拼接成一个以逗号(或自定义分隔符)分隔的字符串。
- 常用于:分组后拼接字段、生成逗号分隔的列表。
2. 基本语法
GROUP_CONCAT([DISTINCT] expr [ORDER BY expr ASC|DESC] [SEPARATOR str])
参数说明
expr
:需要拼接的字段或表达式。DISTINCT
:去重。ORDER BY
:拼接前排序。SEPARATOR
:指定分隔符,默认是,
。
3. 基本示例
表数据
CREATE TABLE student_course (
student_id INT,
course VARCHAR(20)
);
INSERT INTO student_course VALUES
(1, '数学'), (1, '英语'), (1, '物理'),
(2, '英语'), (2, '化学'),
(3, '数学'), (3, '化学');
拼接每个学生的课程
SELECT student_id, GROUP_CONCAT(course) AS courses
FROM student_course
GROUP BY student_id;
👉 结果:
student_id | courses
-----------|-----------------
1 | 数学,英语,物理
2 | 英语,化学
3 | 数学,化学
4. 常见用法
① 去重
SELECT student_id, GROUP_CONCAT(DISTINCT course) AS courses
FROM student_course
GROUP BY student_id;
② 排序拼接
SELECT student_id, GROUP_CONCAT(course ORDER BY course DESC) AS courses
FROM student_course
GROUP BY student_id;
③ 修改分隔符
SELECT student_id, GROUP_CONCAT(course SEPARATOR ' | ') AS courses
FROM student_course
GROUP BY student_id;
👉 输出:
1 | 数学 | 英语 | 物理
5. 高级用法
① 拼接 ID 与值
SELECT student_id, GROUP_CONCAT(CONCAT(student_id, ':', course)) AS info
FROM student_course
GROUP BY student_id;
👉 输出:
1 | 1:数学,1:英语,1:物理
② 配合 JOIN
使用
把部门下的员工姓名拼接:
SELECT d.dept_name, GROUP_CONCAT(e.emp_name) AS employees
FROM department d
JOIN employee e ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
6. 限制与注意事项
- 长度限制
- 默认最大长度:
group_concat_max_len = 1024
- 可以通过设置增加:
SET SESSION group_concat_max_len = 1000000;
- 默认最大长度:
- 与 NULL 的处理
GROUP_CONCAT()
会忽略NULL
值。
- 性能问题
- 大量数据拼接时可能会比较慢,注意分组规模。
7. 适用场景
- 把多行记录拼接成一行字符串(比如用户的多个爱好)。
- 快速生成 CSV 样式的数据。
- SQL 统计时,避免多表连接后再做二次处理。
📌 总结一句:GROUP_CONCAT()
= MySQL 内置的“分组字符串聚合”神器,能把分组后的多行数据合并为一行,支持去重、排序、自定义分隔符。
发表回复