mysql group by 多个行转换为一个字段

 更新时间:2025年08月26日 11:53:59   作者:悟能不能悟  
本文主要介绍了mysql group by 多个行转换为一个字段,可以使用聚合函数GROUP_CONCAT()函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 MySQL 中,将多行数据合并为 ​单个字段​ 可以使用聚合函数 GROUP_CONCAT()。这是处理「多行转单字段」场景(如合并列表、标签聚合等)的标准解决方案。以下是详细说明和示例:

核心语法

SELECT 
   分组字段,
   GROUP_CONCAT([DISTINCT] 合并字段 
                [ORDER BY 排序字段] 
                [SEPARATOR '分隔符'])
FROM 表名
GROUP BY 分组字段;
  • DISTINCT:去重
  • ORDER BY:结果排序
  • SEPARATOR:自定义分隔符(默认逗号,

示例场景

原始数据表user_skills

user_idskill
1Java
1Python
1SQL
2JavaScript
2HTML

目标:每个用户合并技能列表

user_idskills
1Java, Python, SQL
2JavaScript, HTML

实现 SQL

SELECT 
   user_id,
   GROUP_CONCAT(skill SEPARATOR ', ') AS skills
FROM user_skills
GROUP BY user_id;

高级用法

1. 结果去重 + 排序

SELECT 
   user_id,
   GROUP_CONCAT(DISTINCT skill 
                ORDER BY skill ASC    -- 按字母升序排序
                SEPARATOR ' / ')      -- 自定义分隔符
FROM user_skills
GROUP BY user_id;

结果:

user_idskills
1Java / Python / SQL
2HTML / JavaScript

2. 关联表合并字段(多表 JOIN)

SELECT 
   u.user_id,
   u.user_name,
   GROUP_CONCAT(s.skill) AS skills
FROM users u
JOIN user_skills s ON u.user_id = s.user_id
GROUP BY u.user_id, u.user_name;

⚠️ 重要参数

GROUP_CONCAT() 受系统变量限制:

  1. 长度限制​:默认 1024 字符

    -- 临时调高限制(当前会话有效)
    SET SESSION group_concat_max_len = 1000000;
  2. 截断处理​:超过长度时自动截断(不会报错)

对比其他方案

方法适用场景特点
GROUP_CONCAT()多行合并为单字段(字符串)灵活的分隔符和排序控制
子查询 + JSON_ARRAY()需要结构化数据输出MySQL 5.7+ 支持
应用层代码处理复杂合并逻辑更灵活但增加网络传输

复杂案例:合并多列数据

SELECT 
   department,
   GROUP_CONCAT(
      CONCAT(employee_name, ':', salary)   -- 合并姓名和薪资
      ORDER BY salary DESC
      SEPARATOR ' | '
   ) AS emp_data
FROM employees
GROUP BY department;

结果示例:

departmentemp_data
SalesBob:8500
ITTom:9500

通过 GROUP_CONCAT() 可以高效实现多行转单字段的需求,特别适合生成标签云、合并列表等业务场景。

到此这篇关于mysql group by 多个行转换为一个字段的文章就介绍到这了,更多相关mysql group by 转换为一个字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql取得datetime类型的数据,后面会跟个.0的实现方法

    mysql取得datetime类型的数据,后面会跟个.0的实现方法

    下面小编就为大家带来一篇mysql取得datetime类型的数据,后面会跟个.0的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • mysql mysqldump只导出表结构或只导出数据的实现方法

    mysql mysqldump只导出表结构或只导出数据的实现方法

    mysql mysqldump只导出表结构或只导出数据的实现方法,需要的朋友可以参考下。
    2011-11-11
  • MySql之授权用户权限如何设置

    MySql之授权用户权限如何设置

    这篇文章主要介绍了MySql之授权用户权限如何设置问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • MySQL查看、创建和删除索引的方法

    MySQL查看、创建和删除索引的方法

    这篇文章主要介绍了MySQL查看、创建和删除索引的方法,结合实例形式较为详细的分析了MySQL中索引的作用,以及查看、创建及删除索引的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • MySQL使用的常见问题解决与应用技巧汇总

    MySQL使用的常见问题解决与应用技巧汇总

    这篇文章主要给大家总结介绍了我们平时在使用MySQL遇到的常见问题解决与应用技巧的相关资料,包括忘记MySQL的root密码、如何处理 myisam 存储引擎的表损坏、数据目录磁盘空间不足的问题等等问题,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-11-11
  • mysql 左连接、右连接和内连接

    mysql 左连接、右连接和内连接

    以MySql为例。在MySQL数据库中建立两张数据表,并分别插入一些数据。
    2009-07-07
  • MySQL之视图、储储过程、触发器使用及说明

    MySQL之视图、储储过程、触发器使用及说明

    文章介绍了MySQL中的视图、存储过程与触发器:视图是动态生成的虚拟表,用于简化查询和数据访问控制;存储过程是预编译的SQL集合,提升数据处理效率;触发器在表操作前后自动执行,保障数据完整性与操作日志记录
    2025-09-09
  • mysql 查询数据库响应时长的方法示例

    mysql 查询数据库响应时长的方法示例

    要查询MySQL数据库的响应时长,通常我们需要测量查询执行的时间,本文主要介绍了mysql 查询数据库响应时长的方法示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • 解决mysql8.0.19  winx64版本的安装问题

    解决mysql8.0.19 winx64版本的安装问题

    这篇文章主要介绍了mysql8.0.19 数据库 winx64版本的安装问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • windows系统中MySQL和SQLyog的安装和配置教程

    windows系统中MySQL和SQLyog的安装和配置教程

    这篇文章主要介绍了windows系统中MySQL和SQLyog的安装和配置教程的相关资料,包括下载MySQL、解压、设置环境变量、初始化数据库、修改密码等步骤,同时还介绍了如何下载和安装SQLyog图形化工具,以便更方便地管理和操作MySQL数据库,需要的朋友可以参考下
    2025-11-11

最新评论