2017-10-28 10 views
0

2番目に多い番号を見つけます。 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で2番目に高いです。

答えて

0

各部門の従業員をカウントするために最初に使用するグループ化では、dense_rank()ウィンドウ関数を使用してdeptグループのランク値を割り当て、最後に2番目にランク付けされた部門を選択します。彼らはすべてがポップアップ表示されます従業員の数が同じで複数のDEPTSがあるので、もし

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()を使用してソリューションを変更すると、2番目の位置に結びついていても任意のdeptを選択できます。

+0

ここではdnameだけが表示されていますが、dnameには合計が必要です。従業員 –

+0

の 'cnt'列を追加してください。 –

+0

yaaありがとう...... –

関連する問題