找出第二多的没有。使用来自emp和dept表的dname的员工。
select d.dname,count(*) "totemp" from emp e,dept d
where e.deptno=d.deptno
group by (d.dname)
having count(*)=(select max(count(*)) from emp e,dept d
where e.deptno=d.deptno
group by d.dname);
此查询将显示最高编号。使用dname的员工。 但我想要dname第二高。
答案 0 :(得分:0)
首先使用分组来计算每个部门的员工,然后使用dense_rank()
窗口函数为部门组分配等级值,最后选择排名第二的部门。
select dname
from (
select dname, dense_rank() over (order by cnt desc) as rnk
from (
select d.dname, count(*) as cnt
from emp e
join dept d using (deptno)
group by d.dname
) t
) x
where rnk = 2
使用dense_rank()
功能可以正确解决问题,因此如果有多个具有相同员工数量的部署,则会全部弹出。
即使第二个位置有联系,您也可以使用row_number()
功能更改解决方案以选择任意部门。