Oracle查詢部門工資最高員工的兩種方法 一、MAX()函數 二、RANK()函數

  本文以SCOTT用戶下初始的EMP表爲參考。代碼可直接使用。
  查詢EMP表結構的語句以下,【代碼1】:sql

DESC EMP;

  EMP表結構以下:【結果1】:函數

SQL> DESC EMP;
 名稱                                                              是否爲空? 類型
 ----------------------------------------------------------------- -------- --------------------------------------------
 EMPNO                                                             NOT NULL NUMBER(4)
 ENAME                                                                      VARCHAR2(10)
 JOB                                                                        VARCHAR2(9)
 MGR                                                                        NUMBER(4)
 HIREDATE                                                                   DATE
 SAL                                                                        NUMBER(7,2)
 COMM                                                                       NUMBER(7,2)
 DEPTNO                                                                     NUMBER(2)

  本文只選取其中的4列做爲參考,分別是EMPNO,ENAME,SAL,DEPTNO。
  按照工資降序排序的查詢語句以下,【代碼2】:spa

SELECT EMPNO,ENAME,SAL,DEPTNO
FROM EMP
ORDER BY SAL DESC;

  排序結果以下,【結果2】:code

SQL> SELECT EMPNO,ENAME,SAL,DEPTNO
  2  FROM EMP
  3  ORDER BY SAL DESC;

     EMPNO ENAME             SAL     DEPTNO
---------- ---------- ---------- ----------
      7839 KING             5000         10
      7902 FORD             3000         20
      7788 SCOTT            3000         20
      7566 JONES            2975         20
      7698 BLAKE            2850         30
      7782 CLARK            2450         10
      7499 ALLEN            1600         30
      7844 TURNER           1500         30
      7934 MILLER           1300         10
      7521 WARD             1250         30
      7654 MARTIN           1250         30
      7876 ADAMS            1100         20
      7900 JAMES             950         30
      7369 SMITH             800         20

已選擇14行。

  如今我想查詢出每一個部門的工資最高的員工,應該怎麼作呢?繼續……排序

方法1(嵌套查詢 & MAX()函數 & 自身鏈接)

  查詢每一個部門中工資最高的員工,並按照部門號升序排序,【代碼3】:class

SELECT EMPNO,ENAME,SAL,DEPTNO
FROM EMP E1
WHERE
    SAL = (
        SELECT MAX(SAL)
        FROM EMP E2
        WHERE E1.DEPTNO=E2.DEPTNO
    )
ORDER BY DEPTNO;

  查詢結果以下,【結果3】:軟件

SQL> SELECT EMPNO,ENAME,SAL,DEPTNO
  2  FROM EMP E1
  3  WHERE
  4      SAL = (
  5          SELECT MAX(SAL)
  6          FROM EMP E2
  7          WHERE E1.DEPTNO=E2.DEPTNO
  8      )
  9  ORDER BY DEPTNO;

     EMPNO ENAME             SAL     DEPTNO
---------- ---------- ---------- ----------
      7839 KING             5000         10
      7788 SCOTT            3000         20
      7902 FORD             3000         20
      7698 BLAKE            2850         30

方法2(嵌套查詢 & RANK()函數 & 列表分區)

  查詢每一個部門中工資最高的員工,並按照部門號升序排序,【代碼4】:方法

SELECT EMPNO,ENAME,SAL,DEPTNO
FROM (
    SELECT
        RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) R,
        EMPNO,ENAME,SAL,DEPTNO
    FROM EMP
)
WHERE R=1
ORDER BY DEPTNO;

  查詢結果以下,【結果4】:查詢

SQL> SELECT EMPNO,ENAME,SAL,DEPTNO
  2  FROM (
  3      SELECT
  4          RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) R,
  5          EMPNO,ENAME,SAL,DEPTNO
  6      FROM EMP
  7  )
  8  WHERE R=1
  9  ORDER BY DEPTNO;

     EMPNO ENAME             SAL     DEPTNO
---------- ---------- ---------- ----------
      7839 KING             5000         10
      7788 SCOTT            3000         20
      7902 FORD             3000         20
      7698 BLAKE            2850         30

備註:co

  • 環境:Windows 10
  • 軟件:Oracle 11g R2。
相關文章
相關標籤/搜索