【问题标题】:find the employee count based on hire date In Oracle在Oracle中根据雇用日期查找员工人数
【发布时间】:2021-12-09 15:43:19
【问题描述】:

我想找出当年(2020 年)1 月到 12 月之间加入的员工人数。假设如果任何员工在任何特定月份没有加入,则计数应显示为 0。

Empno Ename  Hiredate     deptno
101   ram    11-Jan-20    10
102   kumar  07-Mar-20    10
103   Raja   06-Oct-20    20
104   Sasi   16-Dec-20    20
105   manoj  19-Dec-20    10

Excepted Output

Count  Hiredate_Month
1      Jan
0      Feb
1      Mar
0      Apr
0      May
0      Jun
0      Jul
0      Aug
0      Sep
1      Oct
0      Nov
2      Dec

我尝试了以下事情。

create table emp_details(empno number,ename varchar2(22),hiredate date,deptno number);

insert into emp_details values(101,'ram','11-jan-2020',10);
insert into emp_details values(102,'kumar','07-mar-2020',10);
insert into emp_details values(103,'raja','06-oct-2020',20);
insert into emp_details values(104,'sasi','16-dec-2020',20);
insert into emp_details values(105,'manoj','19-dec-2020',10);

select count(*),to_char(hiredate,'mon') from emp_details group by
to_char(hiredate,'mon')

以上查询未显示员工未加入月份的计数 0。

【问题讨论】:

  • 那么你有什么尝试?请包括您当前的尝试以及您遇到的问题。

标签: sql oracle select oracle11g


【解决方案1】:

在 Scott 的示例架构中,有 EMP 表:

SQL> select ename, hiredate
  2  from emp
  3  order by to_char(hiredate, 'mm');

ENAME      HIREDATE
---------- --------
ADAMS      12.01.83   --> Adams and Miller
MILLER     23.01.82   --> were hired in January
ALLEN      20.02.81
WARD       22.02.81
                      --> nobody was hired in March
JONES      02.04.81   --> Jones was hired in April
BLAKE      01.05.81
CLARK      09.06.81
TURNER     08.09.81
MARTIN     28.09.81
KING       17.11.81
SCOTT      09.12.82
SMITH      17.12.80
JAMES      03.12.81
FORD       03.12.81

14 rows selected.

为了获得您想要的结果,您需要一个 日历 - 包含一年中所有月份的单独表格,因为包含员工的表格不包含所有月份(见上文 - 没有人被雇用例如三月)。

然后您将 calendaroriginal 表进行外部联接,计算员工人数 - 就是这样:

SQL> with calendar as
  2    (select lpad(level, 2, '0') mon
  3     from dual
  4     connect by level <= 12
  5    )
  6  select to_char(to_date(c.mon, 'mm'), 'Mon', 'nls_date_language = english') hiredate_month,
  7    count(e.empno) cnt
  8  from calendar c left join emp e on to_char(e.hiredate, 'mm') = c.mon
  9  group by c.mon
 10  order by c.mon;

HIREDATE_MON        CNT
------------ ----------
Jan                   2
Feb                   2
Mar                   0
Apr                   1
May                   1
Jun                   1
Jul                   0
Aug                   0
Sep                   2
Oct                   0
Nov                   1
Dec                   4

12 rows selected.

SQL>

【讨论】:

  • 它工作正常。
  • 我知道,拉姆 :)
  • 谢谢。:)。这是面试问题。我卡在显示零。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多