【问题标题】:employee count by year员工人数(按年份)
【发布时间】:2019-03-18 14:33:27
【问题描述】:

即使当年没有员工加入,我也需要按年份计算员工人数: 例如

emp_id start_dt term dt 
----------
1      1/1/2010  
----------
2      1/1/2011 12/31/2011
----------
3      1/1/2013
----------
4      1/1/2015 12/31/2016
----------
5      1/1/2016 
----------

我需要打印从第一次发生到 sysdate 的每一年的员工人数,即

2010 1
----------
2011 2
----------
2012 1
----------
2013 2
----------
2014 2
----------
2015 3
----------
2016 4
----------
2017 3
----------
2018 3
----------
2019 3

【问题讨论】:

  • 请与我们分享迄今为止的尝试。
  • 在我最初的要求中,我需要按部门 ID 进行计数,所以我自己加入了部门 ID 上的表并在联接中添加了日期条件,我可以获得正确的计数,但仅适用于行在桌子上,其他年份我错过了行

标签: sql oracle


【解决方案1】:

一种方法是从一张历经多年关注的表格开始。然后可以统计当年在职员工的数量。

例如,

select y.year,
       (select count(*)
        from t
        where year(t.startdt) <= y.year and
              (year(t.termdt) >= y.year or t.termdt is null)
from (select 2011 as year union all
      select 2012 as year union all
      . . .  -- continue for the years of interest
     ) y;

这使用year() 函数,该函数不是标准的,但在许多数据库中都可用。官方功能是extract(year from startdt)

在 Oracle 中,您可以将其表示为:

select y.year,
       (select count(*)
        from t
        where extract(year from t.startdt) <= y.year and
              (extract(year from t.termdt) >= y.year or t.termdt is null)
from (select 2011 as year from dual union all
      select 2012 as year from dual union all
      . . .  -- continue for the years of interest
     ) y;

【讨论】:

    【解决方案2】:

    这将起作用:

    select  EXTRACT(YEAR FROM HIREDATE),count(*) from scott.emp group by EXTRACT(YEAR FROM 
    HIREDATE);
    

    您的案例查询将是:

    select  EXTRACT(YEAR FROM START_DT ),count(*) from tablename group by EXTRACT(YEAR FROM 
    START_DT );
    

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多