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

Oracle中如何按入职日期统计2020年每月员工数 无入职月份显示0

解决方法

你现有查询的核心问题是仅基于员工表已有数据做分组,缺失无入职记录的月份,需要先构造2020年全年12个月的完整基准序列,再通过左关联统计数据,正确SQL如下:

SELECT 
  COUNT(ed.empno) AS "Count",
  t.month_name AS Hiredate_Month
FROM 
  -- 生成2020年1-12月完整月份基准
  (
    SELECT 
      TO_CHAR(ADD_MONTHS(DATE '2020-01-01', LEVEL - 1), 'mon', 'nls_date_language=english') AS month_name,
      LEVEL AS month_order
    FROM DUAL
    CONNECT BY LEVEL <= 12
  ) t
LEFT JOIN emp_details ed 
  ON TO_CHAR(ed.hiredate, 'mon', 'nls_date_language=english') = t.month_name
  AND EXTRACT(YEAR FROM ed.hiredate) = 2020
GROUP BY t.month_name, t.month_order
ORDER BY t.month_order;

逻辑说明

  • 内层通过CONNECT BY LEVEL <=12生成1-12的连续序列,基于2020年1月1日偏移生成全年12个月份,指定nls_date_language=english保证月份缩写为Jan/Feb这类英文格式,新增month_order字段保证后续排序正确。
  • 采用左连接关联员工表,关联条件同时限定入职年份为2020,排除其他年份数据干扰。
  • 统计时使用COUNT(ed.empno)而非COUNT(*),左连接无匹配记录的月份会自动统计为0,符合需求。
  • 最终按month_order排序,输出顺序为1月到12月,和预期格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:36:01