MySQL中GROUP_CONCAT函数的使用详解
MySQL中GROUP_CONCAT函数的使用详解
- 一、简介
- 二、核心语法
- 三、完整案例演示
- 1. 创建示例表
- 2. 插入测试数据
- 3. 基础查询(按类别聚合产品)
- 4. 结果展示(默认格式)
- 四、高级用法示例
- 1. 自定义分隔符
- 2. 结果排序+去重
- 3. 结合CONCAT嵌套使用
- 五、关键注意事项
- 六、实际应用场景
- 七、总结
一、简介
GROUP_CONCAT
是MySQL中强大的聚合函数,用于将分组后的多行数据合并为单个字符串。它用于将多行数据合并为一行,并按照指定的格式进行拼接。这个函数在处理分组数据时非常有用,尤其在需要将多个字段值合并成一个字段的场景下,比如将同一类别下的多个名称合并成一个字符串。适用于需要将分组结果拼接的场景,如:
- 聚合标签、分类信息
- 生成逗号分隔的值列表
- 多行文本合并展示
二、核心语法
GROUP_CONCAT([DISTINCT] 字段 [ORDER BY 排序字段 [ASC|DESC]][SEPARATOR '分隔符']
)
- DISTINCT:去重
- ORDER BY:结果排序
- SEPARATOR:自定义分隔符(默认逗号)
三、完整案例演示
1. 创建示例表
CREATE TABLE sales (id INT PRIMARY KEY AUTO_INCREMENT,product VARCHAR(50),category VARCHAR(20)
);
2. 插入测试数据
INSERT INTO sales (product, category) VALUES
('iPhone 15', 'Electronics'),
('MacBook Pro', 'Electronics'),
('Coffee Maker', 'Kitchen'),
('Blender', 'Kitchen'),
('Yoga Mat', 'Fitness'),
('Dumbbells', 'Fitness');
3. 基础查询(按类别聚合产品)
SELECT category,GROUP_CONCAT(product) AS products
FROM sales
GROUP BY category;
4. 结果展示(默认格式)
category | products |
---|---|
Electronics | iPhone 15,MacBook Pro |
Kitchen | Coffee Maker,Blender |
Fitness | Yoga Mat,Dumbbells |
四、高级用法示例
1. 自定义分隔符
SELECT category,GROUP_CONCAT(product SEPARATOR ' | ') AS products
FROM sales
GROUP BY category;
结果:
Electronics → iPhone 15 | MacBook Pro
2. 结果排序+去重
SELECTcategory,GROUP_CONCAT(DISTINCT product ORDER BY product DESC SEPARATOR '; ')
FROM sales
GROUP BY category;
结果:
Electronics → MacBook Pro; iPhone 15
3. 结合CONCAT嵌套使用
SELECTcategory,GROUP_CONCAT(CONCAT(product, ' ($99)') SEPARATOR '\n') AS products
FROM sales
GROUP BY category;
结果:
Electronics →
iPhone 15 ($99)
MacBook Pro ($99)
五、关键注意事项
-
长度限制
受group_concat_max_len
变量控制(默认1024字节):-- 查看当前限制 SHOW VARIABLES LIKE 'group_concat_max_len';-- 设置会话级长度(全局需加GLOBAL) SET SESSION group_concat_max_len = 2048;
-
NULL值处理
若字段包含NULL,该行会被跳过:INSERT INTO sales (product, category) VALUES (NULL, 'Electronics'); SELECT GROUP_CONCAT(product) FROM sales; -- 输出:iPhone 15,MacBook Pro,Coffee Maker,...
-
结果截断
超过group_concat_max_len
时结果会被截断,并产生警告。
六、实际应用场景
✅ 标签系统:聚合用户所有标签
✅ 报表生成:动态生成CSV格式数据
✅ 权限列表:合并用户的权限信息
✅ 级联展示:省市区三级联动数据拼接
📌 最佳实践:在需要拼接的字段上建立索引,可显著提升大表分组性能。
七、总结
GROUP_CONCAT
解决了SQL中行转列的核心痛点,通过灵活组合DISTINCT
、ORDER BY
和SEPARATOR
参数,可高效实现复杂的数据聚合需求。使用时需注意长度限制和NULL值影响,合理配置参数可避免意外截断。