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

如何在MySQL中用GROUP BY按月份汇总不同类型的请假天数?

问题解决思路及修改后的SQL

你的问题出在两个核心点:

  • GROUP BY同时包含MONTH(covered_from)和leave_type,导致同一个月份会按请假类型拆分成多条记录
  • SELECT使用*会带出具体日期值,而非你需要的月份名称

修改后的SQL如下(以MySQL为例):

SELECT
  CASE MONTH(covered_from)
    WHEN 1 THEN '一月'
    WHEN 2 THEN '二月'
    WHEN 3 THEN '三月'
    WHEN 4 THEN '四月'
    WHEN 5 THEN '五月'
    WHEN 6 THEN '六月'
    WHEN 7 THEN '七月'
    WHEN 8 THEN '八月'
    WHEN 9 THEN '九月'
    WHEN 10 THEN '十月'
    WHEN 11 THEN '十一月'
    WHEN 12 THEN '十二月'
  END AS 日期,
  SUM(IF(leave_type = 'SL', number_of_days, 0)) AS sl,
  SUM(IF(leave_type = 'VL', number_of_days, 0)) AS vl
FROM leaves
WHERE `status` = 'Approved' AND `emp_id` = 'pb123'
GROUP BY MONTH(covered_from)
ORDER BY MONTH(covered_from)

修改说明:

  1. 移除leave_type分组:仅按MONTH(covered_from)分组,确保同一个月份的所有请假记录合并,SL和VL的天数分别累加
  2. 替换日期显示:用CASE语句将月份数字转换为中文名称,替代原查询中的具体日期
  3. 简化条件判断:直接用leave_type = 'SL'替代STRCMP,逻辑更直观
  4. 添加排序:ORDER BY MONTH(covered_from)保证结果按月份顺序排列

执行后将得到你预期的按月汇总结果:

日期SLVL
七月40
八月51

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:17:21