You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL返回的多行记录按staff合并province字段?

MySQL 按staff分组合并province为逗号分隔字符串的实现方法

直接用MySQL内置的GROUP_CONCAT()函数就能搞定,这是处理分组合并字符串最常用的方案,具体用法如下:

基础实现

假设你的表名为your_table,执行以下SQL即可按staff分组,把对应多个province合并成逗号分隔的字符串:

SELECT 
    staff,
    GROUP_CONCAT(province) AS provinces
FROM 
    your_table
GROUP BY 
    staff;

默认情况下,GROUP_CONCAT()会用逗号作为分隔符,如果你想让分隔后更易读(比如变成广东, 广西而不是广东,广西),可以自定义分隔符:

SELECT 
    staff,
    GROUP_CONCAT(province SEPARATOR ', ') AS provinces
FROM 
    your_table
GROUP BY 
    staff;

进阶优化

  1. 去重合并:如果同一staff下有重复的province记录,想合并后只保留唯一值,加上DISTINCT关键字即可:
SELECT 
    staff,
    GROUP_CONCAT(DISTINCT province SEPARATOR ', ') AS provinces
FROM 
    your_table
GROUP BY 
    staff;
  1. 指定排序顺序:如果需要合并后的province按特定逻辑排序(比如按id升序),可以在函数内添加ORDER BY:
SELECT 
    staff,
    GROUP_CONCAT(province ORDER BY id ASC SEPARATOR ', ') AS provinces
FROM 
    your_table
GROUP BY 
    staff;
  1. 处理长度限制:GROUP_CONCAT()默认有1024字节的长度限制,合并后的字符串过长会被截断。可以临时调整会话级的限制:
SET SESSION group_concat_max_len = 102400; -- 设置为100KB,可按需调整数值

如果需要永久生效,修改MySQL配置文件(如my.cnf或my.ini),添加以下配置后重启服务:

group_concat_max_len = 102400

示例效果

假设原表数据如下:

idstaffprovince
1张三广东
2张三广西
3李四江苏
4李四浙江
5李四江苏

执行带去重的SQL后,返回结果:

staffprovinces
张三广东, 广西
李四江苏, 浙江

内容的提问来源于stack exchange,提问作者ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:08