Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql group by 转换为一个字段

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

作者:悟能不能悟

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

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

核心语法

SELECT 
   分组字段,
   GROUP_CONCAT([DISTINCT] 合并字段 
                [ORDER BY 排序字段] 
                [SEPARATOR '分隔符'])
FROM 表名
GROUP BY 分组字段;

示例场景

原始数据表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 转换为一个字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文