2017-10-28 129 views
0

找出第二最沒有。的員工使用emp和dept表中的dname。爲以下情況編寫一個sql查詢?

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

首先使用分組對每個部門的員工進行計數,然後使用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()功能挑即使有在第二位置關係任意改變部門的解決方案。

+0

但這裏只DNAME顯示,但我想總沒有DNAME。員工 –

+0

增加了'cnt'列,它就在那裏。 –

+0

YAA感謝...... –