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更新varchar存储Json数据的操作方法

    Mysql更新varchar存储Json数据的操作方法

    这篇文章主要介绍了Mysql更新varchar存储Json数据的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • Linux下mysql新建账号及权限设置方法

    Linux下mysql新建账号及权限设置方法

    Linux下mysql新建账号及权限设置方法,其实linux与windows下的设置方法一样的,都是命令行操作
    2012-07-07
  • MySQL数据库约束和多表查询实例代码

    MySQL数据库约束和多表查询实例代码

    这篇文章主要介绍了MySQL数据库约束和多表查询的相关资料,文中通过代码介绍的非常详细,还总结了SQL执行顺序,为后续索引与事务内容做铺垫,需要的朋友可以参考下
    2025-07-07
  • mysql中取字符串中的数字的语句

    mysql中取字符串中的数字的语句

    在很多时间我们需要把字符串的数字给取出来,通常大家会用php,asp等这类来操作,本文章介绍了在sql中取字符中的数字办法,有需要的朋友可以参考一下
    2012-04-04
  • MySQL数据表字段操作指南之添加、修改与删除方法

    MySQL数据表字段操作指南之添加、修改与删除方法

    这篇文章主要介绍了MySQL中使用ALTER TABLE语句修改数据表结构的方法,包括添加、修改和删除字段,通过实例演示了如何高效地管理数据表结构,需要的朋友可以参考下
    2024-12-12
  • MySQL8.0.26的安装与简化教程(全网最全)

    MySQL8.0.26的安装与简化教程(全网最全)

    MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的标准化语言,今天通过本文给大家分享MySQL8.0.26的安装与简化教程使全网最详细的安装教程,需要的朋友参考下吧
    2021-07-07
  • PHP mysqli扩展库 预处理技术的使用分析

    PHP mysqli扩展库 预处理技术的使用分析

    本篇文章,介绍了PHP mysqli扩展库 预处理技术的使用分析。需要的朋友参考下
    2013-05-05
  • 深入解析MySQL中的Redo Log、Undo Log和Binlog

    深入解析MySQL中的Redo Log、Undo Log和Binlog

    本文详细介绍了MySQL中的RedoLog、UndoLog和Binlog的背景、业务场景、功能、底层实现原理以及使用措施,通过Java代码示例展示了如何与这些日志进行交互,进一步深化了对MySQL日志系统的理解,理解并合理使用这些日志,可以有效地提升数据库的性能和可靠性
    2024-10-10
  • 数据库中笛卡尔积定义、生成与避免策略实践方法

    数据库中笛卡尔积定义、生成与避免策略实践方法

    笛卡尔积是指两个集合中的每个元素都与另一个集合中的每个元素组合形成的所有元素的集合,这篇文章主要给大家介绍了关于数据库中笛卡尔积定义、生成与避免策略实践的相关资料,需要的朋友可以参考下
    2024-05-05
  • Mysql效率优化定位较低sql的两种方式

    Mysql效率优化定位较低sql的两种方式

    通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率较低的 SQL
    2015-10-10

最新评论