本文以SCOTT用户下初始的EMP表为参考。代码可直接使用。

  查询EMP表结构的语句如下,【代码1】:

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】:

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

  排序结果如下,【结果2】:

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】:

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

备注:

  • 环境:Windows 10
  • 软件:Oracle 11g R2。

Oracle查询部门工资最高员工的两种方法 1、MAX()函数 2、RANK()函数的更多相关文章

  1. MySQL关闭查询缓存(QC)的两种方法

    MySQL Query Cache 会缓存select 查询,安装时默认是开启的,但是如果对表进行INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP ...

  2. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  3. oracle rename数据文件的两种方法

    oracle rename数据文件的两种方法 2012-12-11 20:44 10925人阅读 评论(0) 收藏 举报  分类: oracle(98)  版权声明:本文为博主原创文章,未经博主允许不 ...

  4. 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

    oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...

  5. Oracle中spool命令实现的两种方法比较

    ---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...

  6. 用easyui实现查询条件的后端传递并自动刷新表格的两种方法

    用easyui实现查询条件的后端传递并自动刷新表格的两种方法 搜索框如下: 通过datagrid的load方法直接传递参数并自动刷新表格 通过ajax的post函数传递参数并通过loadData方法将 ...

  7. oracle多表关联删除的两种方法

    oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...

  8. C++连接mysql数据库的两种方法

    本文主要介绍了C++连接mysql数据库的两种方法,希望通过本文,能对你有所帮助,一起来看. 现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用a ...

  9. php导出表格两种方法 ——PhpExcel的列子

    php常用的导出表格有两种方法,第一种是输出表格,这种方法打开的时候有警告提示,一般导出表格会用phpexcel,这个导出比较灵活,而且还可以设置表格的样式. 第一种导出例子 /** * 执行导出 * ...

随机推荐

  1. hdu6468(记忆化搜索)

    zyb的面试 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  2. springMVC_注解方式搭建基础环境

    ---恢复内容开始--- 一.jar包环境,web配置文件和Spring-MVC配置文件的,相关的modelAndview 1.配置DispatcherServlet <servlet>  ...

  3. CodeForces - 1175D Array Splitting(数组划分+后缀和+贪心)

    You are given an array a1,a2,…,ana1,a2,…,an and an integer kk. You are asked to divide this array in ...

  4. thymeleaf 直接调用后台Service

    前端thymeleaf <select name="sex" class="form-control m-b" th:with="type=${ ...

  5. linux下修改jar中的文件

    解压修改后再打包 解压: jar xvf xxx.jar 打包: jar cvfm0 xxx.jar META-INF/MANIFEST.MF ./ 注: -m参数可以将 一个具体的mainfest文 ...

  6. JS 将页面上的表格导出为 Excel 文件

    如果在页面上展示了一个表格,想把这个表格导出为Excel文件,那么在要求不高的情况下,可以直接利用 JavaScript 的 Blob 和 Object URL 特性将表格导出.不过,这就是利用了 E ...

  7. Vuex 通俗版教程告诉你Vuex怎么用

    写在文前: 最近一直在用vue开发项目,写来写去就是那么些方法,对于简单的项目一些常用的vue方法足以解决,但是涉及到页面状态,权限判断等一些复杂的传值,vuex是必须的.对于vuex也运用一段时间, ...

  8. 设计-Int(4)和Int(11)谁更美

    设计-Int(4)和Int(11)谁更美 [缘起] 大家平时在进行数据库设计的时候,如果遇到需要存储整数类型的数据的时候,通常会优先使用Int这个整数类型,在处理20亿级别的正负数值存储上,Int类型 ...

  9. QDateTime QString

    QDateTime格式化  yyyy-MM-dd hh:mm:ss QString getFormatDateStr(QDateTime dateTimeParam) { qDebug() <& ...

  10. SSM配置基于注解AOP

    pom.xml <dependency> <groupId>org.springframework</groupId> <artifactId>spri ...