【问题标题】:Get the minimum employees with a given job获得给定工作的最少员工
【发布时间】:2015-03-28 11:52:26
【问题描述】:

我有这张桌子:

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).

我希望获得具有给定工作的最少员工的部门(例如所有从事“分析师”工作的员工)。

你能帮我查询一下吗?

【问题讨论】:

  • Count + Group by + Order by + ROWNUM
  • 我应该试一试。
  • 寻找所有这些概念来达到结果

标签: sql oracle top-n


【解决方案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;

【讨论】:

  • @TusharShimpi 。 . .这不会返回一个分析师为零的部门,这将是我理解的最低问题。
【解决方案2】:

鉴于此类员工的最小数量可能是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;

【讨论】:

  • 顺序应该是升序以获得员工人数最少的部门
  • @codiacTushki 。 . .谢谢。
猜你喜欢
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2015-06-14
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多