找到有最大员工人数的部门

时间:2015-03-03 00:59:51

标签: sql

我有一名员工

id name  dept
1  bucky shp
2  name  shp
3  other mrk

如何获得拥有最多员工人数的部门名称? ..

我需要结果

dept
--------
shp

4 个答案:

答案 0 :(得分:1)

SELECT cnt,deptno FROM (
SELECT rank() OVER (ORDER BY cnt desc) AS rnk,cnt,deptno from
(SELECT COUNT(*) cnt, DEPTNO FROM EMP
GROUP BY deptno))
WHERE rnk = 1;

答案 1 :(得分:0)

假设您使用的是SQL Server以及代表员工的每条记录。所以你可以使用窗口函数来得到结果

WITH C AS (
    SELECT  RANK() OVER (ORDER BY dept) Rnk
            ,name
            ,dept
    FROM table
)
SELECT TOP 1 dept FROM 
(SELECT COUNT(Rnk) cnt, dept FROM C GROUP BY dept) t
ORDER BY cnt DESC 

答案 2 :(得分:0)

使用公用表表达式,计算每个部门的行数,然后查找最大计数,然后使用它来选择最大的部门。

WITH depts(dept, size) AS (
  SELECT dept, COUNT(*) FROM employee GROUP BY dept
), biggest(size) AS (
  SELECT MAX(size) FROM depts
)
SELECT dept FROM depts, biggest WHERE depts.size = biggest.size

答案 3 :(得分:0)

根据答案之一,让我尝试逐步解释

首先,我们需要明智地安排员工计数部门。因此,第一个最里面的查询将运行

select count(*) cnt, deptno from scott.emp group by deptno

这将显示为

enter image description here

现在,我们必须得到具有最大最大值的那个。员工,即部门30。

还请注意,两个部门的员工人数可能相同

第二级查询是

select rank() over (order by cnt desc) as rnk,cnt,deptno from
(
   select count(*) cnt, deptno from scott.emp group by deptno
)

现在我们已经为每个部门分配了排名

enter image description here

现在从中选择等级1。我们有一个最简单的外部查询

select * from 
(
  select rank() over (order by cnt desc) as rnk,cnt,deptno from
   (
      select count(*) cnt, deptno from scott.emp group by deptno
   )
)
 where rnk=1

因此,最终的结果是我们的部门拥有最多的员工。如果我们需要最少的部门,则必须包括部门表,因为有可能某个部门没有员工,因此不会在此表中列出

您可以忽略scott.emp中的 scott ,因为它是表的所有者。

可以在Practise SQL online上实践以上SQL