好的,阿杰 😄,我给你整理一份 MySQL GROUP_CONCAT
函数使用总结,从基本用法到高级技巧,帮你彻底理解这个函数。
📝 MySQL GROUP_CONCAT
函数详解
一、概念
GROUP_CONCAT()
是 聚合函数- 用于 将分组后的多行字段值连接成一个字符串
- 常用于 将同组的多条记录合并显示
基本语法
GROUP_CONCAT([DISTINCT] expr
[ORDER BY expr ASC|DESC]
[SEPARATOR str])
参数 | 说明 |
---|---|
DISTINCT | 去重,去掉重复值 |
expr | 要连接的字段 |
ORDER BY | 排序(默认按字段顺序) |
SEPARATOR str | 分隔符,默认逗号 , |
二、基本用法
1. 按组连接字段
SELECT department_id, GROUP_CONCAT(employee_name)
FROM employees
GROUP BY department_id;
输出示例:
department_id | GROUP_CONCAT(employee_name)
1 | Alice,Bob,Charlie
2 | David,Emma
2. 使用分隔符
SELECT department_id, GROUP_CONCAT(employee_name SEPARATOR '; ')
FROM employees
GROUP BY department_id;
输出:
1 | Alice; Bob; Charlie
2 | David; Emma
三、去重(DISTINCT)
SELECT department_id, GROUP_CONCAT(DISTINCT employee_name)
FROM employees
GROUP BY department_id;
- 去掉重复员工名
- 避免重复值累加
四、排序(ORDER BY)
SELECT department_id, GROUP_CONCAT(employee_name ORDER BY employee_name DESC)
FROM employees
GROUP BY department_id;
- 按指定字段排序
- 可使用
ASC
或DESC
五、组合去重与排序
SELECT department_id, GROUP_CONCAT(DISTINCT employee_name ORDER BY employee_name ASC SEPARATOR '|')
FROM employees
GROUP BY department_id;
输出示例:
1 | Alice|Bob|Charlie
2 | David|Emma
六、长度限制
- 默认最大长度 1024 字节
- 可通过系统变量调整:
SET SESSION group_concat_max_len = 10000;
- 适用于连接大量数据时避免截断
七、实战场景
- 把多行数据合并成一行
-- 查询每个订单的所有商品
SELECT order_id, GROUP_CONCAT(product_name ORDER BY product_name SEPARATOR ', ') AS products
FROM order_items
GROUP BY order_id;
- 生成标签列表
SELECT article_id, GROUP_CONCAT(tag_name) AS tags
FROM article_tags
GROUP BY article_id;
- 用于报表
- 将多个记录合并显示在 Excel 或前端页面
八、小技巧
- 避免空值影响
SELECT GROUP_CONCAT(COALESCE(employee_name, 'N/A')) FROM employees;
- 结合 CONCAT 使用
SELECT department_id, GROUP_CONCAT(CONCAT(employee_name, '(', employee_id, ')'))
FROM employees
GROUP BY department_id;
输出示例:
Alice(1),Bob(2),Charlie(3)
- 结合子查询
SELECT department_id,
(SELECT GROUP_CONCAT(employee_name)
FROM employees e2
WHERE e2.department_id = e1.department_id) AS emp_list
FROM departments e1;
发表回复