获得给定工作的最低员工

时间:2015-03-28 11:52:26

标签: sql oracle top-n

我有这张桌子:

Name                       Null?    Type
-------------------------- -------- ------------
EMPLOYEENO                 NOT NULL NUMBER(4)
ENAME                               VARCHAR2(15)
JOB                                 VARCHAR2(15)
MGR                                 NUMBER(4)
HIREDATE                            DATE
SAL                                 NUMBER
COMM                                NUMBER
DEPTNO                              NUMBER(2).

我希望让最少的员工拥有一份特定的工作(例如所有员工都有' Analyst' job)。

你可以帮我查询一下吗?

2 个答案:

答案 0 :(得分:1)

这里的关键是获得员工在每个部门做特定工作的计数。在下面的查询中,这是通过子查询实现的。然后,我们希望得到最低限度的部门。员工在做那个工作,所以我们将子查询返回的记录按升序排序,然后使用rownum = 1选择第一个结果

SELECT DEPTNO from ( SELECT COUNT(*) AS NO_OF_EMP , DEPTNO FROM EMPLOYEE EMP WHERE EMP.JOBNAME = 'Analyst' GROUP BY DEPTNO ORDER BY NO_OF_EMP ASC ) where ROWNUM = 1;

答案 1 :(得分:0)

鉴于此类员工的最低人数可能为0,您需要对如何执行此操作有点聪明:

select d.*
from (select deptno,
             sum(case when jobname = 'Analyst' then 1 else 0 end) as numAnalysts
      from employees
      group by deptno
      order by numAnalysts asc
     ) d
where rownum = 1;