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

如何在MySQL中按人员分别对Month字段执行Group By操作

解决方案:使用分组+条件聚合实现需求

不需要用循环遍历人员再关联,直接通过分组(GROUP BY)+ 条件聚合就能高效实现你要的行转列效果,这是处理这类需求的标准简便方法。

假设原表结构

假设你的原表名为staff_data,包含以下字段:

  • person:人员标识(姓名/ID)
  • month:月份(数值型,如1-12)
  • value:每月对应的数据值

实现SQL语句

SELECT
    person,
    SUM(CASE WHEN month = 1 THEN value ELSE 0 END) AS `Month1`,
    SUM(CASE WHEN month = 2 THEN value ELSE 0 END) AS `Month2`,
    SUM(CASE WHEN month = 3 THEN value ELSE 0 END) AS `Month3`,
    SUM(CASE WHEN month = 4 THEN value ELSE 0 END) AS `Month4`,
    SUM(CASE WHEN month = 5 THEN value ELSE 0 END) AS `Month5`,
    SUM(CASE WHEN month = 6 THEN value ELSE 0 END) AS `Month6`,
    SUM(CASE WHEN month = 7 THEN value ELSE 0 END) AS `Month7`,
    SUM(CASE WHEN month = 8 THEN value ELSE 0 END) AS `Month8`,
    SUM(CASE WHEN month = 9 THEN value ELSE 0 END) AS `Month9`,
    SUM(CASE WHEN month = 10 THEN value ELSE 0 END) AS `Month10`,
    SUM(CASE WHEN month = 11 THEN value ELSE 0 END) AS `Month11`,
    SUM(CASE WHEN month = 12 THEN value ELSE 0 END) AS `Month12`
FROM staff_data
GROUP BY person;

逻辑说明

  1. GROUP BY person:直接按人员分组,一次性完成所有人员的分组统计,无需循环遍历
  2. 条件聚合:每个CASE WHEN语句针对特定月份筛选数据,匹配时取对应value,否则取0;通过SUM聚合后,就能得到该人员对应月份的汇总值(如果每个人员每月仅一条数据,用MAX/MIN替代SUM效果一致)
  3. 适配不同月份格式:如果你的month字段是字符串格式(如'2023-01'),只需将month = 1替换为month = '2023-01'即可

动态列扩展(可选)

如果你的月份不固定(比如跨年度),需要动态生成列,可以使用MySQL存储过程拼接SQL语句,但对于固定12个月的场景,上述静态写法是最简洁高效的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:25:55