0

私の従業員テーブルには3つの列があります:

  • emp_id
  • emp_sal
  • dept_id.

部門ごとに、給与が最も高い従業員を見つける必要があります。私は戻る必要がありemp_id、それらの従業員のために。emp_saldept_id

前もって感謝します

4

4 に答える 4

4

ORACLE一般的なテーブル式とウィンドウ関数をサポートし、

WITH employees_sal
AS
(
    SELECT  emp_id,
            emp_sal,
            dept_id,
            DENSE_RANK() OVER(PARTITION BY dept_id ORDER BY emp_sal DESC) ranks
    FROM    employee
)
SELECT  emp_id, emp_sal, dept_id
FROM    employees_sal
WHERE   ranks = 1
于 2013-03-11T02:18:38.113 に答える
3
SELECT EMP_ID,EMP_SAL,DEPT_ID 
FROM EMP
WHERE (DEPT_ID,EMP_SAL) IN (SELECT DEPT_ID,MAX(EMP_SAL) 
                           FROM EMP GROUP BY DEPT_ID)
于 2013-03-11T02:23:10.673 に答える
2

CTEを使用する必要はありません。

SELECT a.emp_id, a.emp_sal, a.dept_id
FROM employ a
WHERE a.emp_sal = 
    (SELECT MAX(b.emp_sal)
    FROM employ b
    WHERE b.dept_id = a.dept_id
    AND A.emp_id = B.emp_id)
于 2013-03-11T02:20:40.007 に答える
0
SELECT * FROM 
( 
 SELECT deptno, ename, sal
     , MAX(sal) OVER (PARTITION BY deptno) dept_max_sal 
     , ROW_NUMBER() OVER (PARTITION BY deptno ORDER BY sal desc) rno
   FROM scott.emp 
 )
 WHERE sal = dept_max_sal
  -- AND rno = 1 -- Optional to eliminate same salary employee --
 ORDER BY deptno, sal DESC, ename
/

DEPTNO    ENAME    SAL    DEPT_MAX_SAL    RNO
-----------------------------------------------
10        KING     5000    5000           1
20        FORD     3000    3000           2    -- same sal --
20        SCOTT    3000    3000           1    -- same sal --
30        BLAKE    2850    2850           1
于 2013-03-11T18:46:50.080 に答える