本文以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. meshing-轴

    原视频下载地址:https://yunpan.cn/cqrJRm32dMmAL  访问密码 9dd9

  2. 【java反射】

    反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的.于是我们直接对这个类进行实例化,之后使用这个类对象进行操作. A ...

  3. 如何实现数组与List的相互转换

    List转数组:toArray(arraylist.size()方法 数组转List:Arrays的asList(a)方法 List<String> arrayList = new Arr ...

  4. html中的lang标记有什么用

    html中的lang标记有什么用 一.总结 一句话总结: 为文档或元素设定主语言(即lang) 比如google浏览器有个自动翻译的功能,而自动翻译要看这个文档的语言 1.其它标签中设置lang属性? ...

  5. CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天

    CVE-2019-11477:Linux 内核中TCP协议栈整数溢出漏洞详细分析 代码卫士 今天

  6. Java并发包线程池之ForkJoinPool即ForkJoin框架(二)

    前言 前面介绍了ForkJoinPool相关的两个类ForkJoinTask.ForkJoinWorkerThread,现在开始了解ForkJoinPool.ForkJoinPool也是实现了Exec ...

  7. 解决Vue编译和打包时频繁内存溢出情况CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

    解决Vue编译和打包时频繁内存溢出情况CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 如上图所示:频繁出现此 ...

  8. Sass(Syntactically Awesome Stylesheets)——概述(待续)

    官网地址:http://sass.bootcss.com/ Sass(Syntactically Awesome Stylesheets) Sass 是成熟.稳定.强大的 CSS 扩展语言. 特征 兼 ...

  9. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_08-课程预览技术方案

    3.2.1 技术需求 课程详情页面是向用户展示课程信息的窗口,课程相当于网站的商品,本页面的访问量会非常大.此页面的内容设 计不仅要展示出课程核心重要的内容而且用户访问页面的速度要有保证,有统计显示打 ...

  10. 阶段5 3.微服务项目【学成在线】_day18 用户授权_06-方法授权-方法授权测试-无权限异常处理

    现在没权限返回的信息 控制台抛出的异常是这个 : 不允许访问,这是Spring Security跑出来的 我们在异常处理器里面打个断点看一下 重新测试,就跳转到了异常捕获类这里. 这是异常的类型 这里 ...