当前位置: 首页 > news >正文

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. 结果展示(默认格式)

categoryproducts
ElectronicsiPhone 15,MacBook Pro
KitchenCoffee Maker,Blender
FitnessYoga 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)

五、关键注意事项

  1. 长度限制
    group_concat_max_len变量控制(默认1024字节):

    -- 查看当前限制
    SHOW VARIABLES LIKE 'group_concat_max_len';-- 设置会话级长度(全局需加GLOBAL)
    SET SESSION group_concat_max_len = 2048;
    
  2. NULL值处理
    若字段包含NULL,该行会被跳过:

    INSERT INTO sales (product, category) VALUES (NULL, 'Electronics');
    SELECT GROUP_CONCAT(product) FROM sales; 
    -- 输出:iPhone 15,MacBook Pro,Coffee Maker,...
    
  3. 结果截断
    超过group_concat_max_len时结果会被截断,并产生警告。


六、实际应用场景

标签系统:聚合用户所有标签
报表生成:动态生成CSV格式数据
权限列表:合并用户的权限信息
级联展示:省市区三级联动数据拼接

📌 最佳实践:在需要拼接的字段上建立索引,可显著提升大表分组性能。


七、总结

GROUP_CONCAT解决了SQL中行转列的核心痛点,通过灵活组合DISTINCTORDER BYSEPARATOR参数,可高效实现复杂的数据聚合需求。使用时需注意长度限制和NULL值影响,合理配置参数可避免意外截断。

http://www.xdnf.cn/news/1280521.html

相关文章:

  • 机器翻译:一文掌握序列到序列(Seq2Seq)模型(包括手写Seq2Seq模型)
  • ssh 远程连接加密算法报错
  • MyBatis执行器与ORM特性深度解析
  • 十二、Linux Shell脚本:正则表达式
  • 导入CSV文件到MySQL
  • 打破内网枷锁!TRAE SOLO + cpolar 让AI开发告别“孤岛困境”
  • 腾讯 iOA 测评 | 横向移动检测、病毒查杀、外设管控、部署性能
  • 浏览器CEFSharp+X86+win7 之 测试抖音小店订单抓取(八)
  • 运动规划实战案例 | 基于多源流场(Flow Field)的路径规划(附ROS C++/Python实现)
  • Nmap 渗透测试弹药库:精准扫描与隐蔽渗透技术手册
  • Qt串口通信设计指南:通信层架构与实践
  • [go] 命令模式
  • 【软考架构】主流数据持久化技术框架
  • android 换肤框架详解1-换肤逻辑基本
  • 2025第十六届蓝桥杯大赛青少组省赛C++真题(初级组和中级组)
  • 数学建模——灰色预测(GM11)
  • 北京JAVA基础面试30天打卡07
  • HTTPS的应用层协议
  • react+vite-plugin-react-router-generator自动化生成路由
  • 安全等级认证系列 | 星环ArgoDB获CC EAL2安全认证,数据安全实力获国际认可
  • Linux入门DAY21
  • 用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖
  • 读《精益数据分析》:媒体内容平台全链路梳理
  • 低延迟RTSP|RTMP视频链路在AI驱动无人机与机器人操控中的架构实践与性能优化
  • TRS(总收益互换)系统架构设计:多市场交易的技术实现分析
  • 每日五个pyecharts可视化图表-line:从入门到精通 (3)
  • 常用设计模式系列(十九)- 状态模式
  • 闸机控制系统从设计到实现全解析:第 5 篇:RabbitMQ 消息队列与闸机通信设计
  • HBase BlockCache:LRU Cache
  • Agent用户体验设计:人机交互的最佳实践