好嘞 👍 阿杰,我来帮你整理一份 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. 限制与注意事项

  1. 长度限制
    • 默认最大长度:group_concat_max_len = 1024
    • 可以通过设置增加:SET SESSION group_concat_max_len = 1000000;
  2. 与 NULL 的处理
    • GROUP_CONCAT() 会忽略 NULL 值。
  3. 性能问题
    • 大量数据拼接时可能会比较慢,注意分组规模。

7. 适用场景

  • 把多行记录拼接成一行字符串(比如用户的多个爱好)。
  • 快速生成 CSV 样式的数据。
  • SQL 统计时,避免多表连接后再做二次处理。

📌 总结一句:
GROUP_CONCAT() = MySQL 内置的“分组字符串聚合”神器,能把分组后的多行数据合并为一行,支持去重、排序、自定义分隔符。