本文以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行。
如今我想查詢出每一個部門的工資最高的員工,應該怎麼作呢?繼續……排序
查詢每一個部門中工資最高的員工,並按照部門號升序排序,【代碼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
查詢每一個部門中工資最高的員工,並按照部門號升序排序,【代碼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