我有一名员工
id name dept
1 bucky shp
2 name shp
3 other mrk
如何获得拥有最多员工人数的部门名称? ..
我需要结果
dept
--------
shp
答案 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
这将显示为
现在,我们必须得到具有最大最大值的那个。员工,即部门30。
还请注意,两个部门的员工人数可能相同
第二级查询是
select rank() over (order by cnt desc) as rnk,cnt,deptno from
(
select count(*) cnt, deptno from scott.emp group by deptno
)
现在我们已经为每个部门分配了排名
现在从中选择等级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