本文以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