2017-01-05 7 views
0

マネージャの名前を表示するSQLクエリを書く必要があります。従業員の最大数を持つマネージャの名前を見つける

表の構造:

EMPNO INT PRIMARY KEY 
ENAME VARCHAR NOT NULL 
MGR_ID INT 

MGR_ID従業員の属性がマネージャのEMPNO(主キー)です。

SELECT ENAME FROM EMP WHERE 
(SELECT COUNT(MGR_ID) FROM EMP GROUP BY MGR_ID)= 
(SELECT MAX(SELECT COUNT(MGR_ID) FROM EMP GROUP BY MGR_ID) FROM EMP); 

答えて

1
WITH mgr_cnt 
    AS ( SELECT mgr_id, COUNT (*) cnt 
      FROM EMP 
     GROUP BY mgr_id) 
SELECT e.ename 
    FROM emp e, 
     (SELECT mgr_id, cnt, DENSE_RANK() OVER (ORDER BY cnt DESC) rnk 
      FROM mgr_cnt) t 
WHERE e.empno = t.mgr_id and t.rnk=1; 

をa_horse_with_no_name

SELECT e.ename FROM 
    emp e 
    INNER JOIN 
    ( 
     SELECT mgr_id, DENSE_RANK() OVER (ORDER BY COUNT (*) DESC) rnk 
     FROM emp 
    GROUP BY mgr_id 
    )list 
    ON (list.mgr_id=e.empno) 
    WHERE list.rnk=1 

PSによって提案された別のバージョン::クエリはあなたが窓の機能を組み合わせることにより、これを簡素化することができます

+1

をテストされていない私がこれまで試したどのような

集計: 'mgr_id'によってempグループからmgr_id、dense_rank()を(count(*)descの順に)選択してください。明示的な 'JOIN'を使用しているrtは、where句の旧式の暗黙的な結合ではありません。 –

+0

@a_horse_with_no_name先生、ありがとう、私はこれを世話します。 –

関連する問題