注释:为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的

oracel的高级用法:rank()/dense_rank() over(partition by ...order by ...)

现在客户有这样一个需求,查询每个部门工资最高的雇员的信息

方法一:常用方法

select e.ename, e.job, e.sal, e.deptno
from scott.emp e,
(select e.deptno, max(e.sal) sal from scott.emp e group by e.deptno) me
where e.deptno = me.deptno
and e.sal = me.sal;

方法二:rank() over(partition by...order by ...)

select e.ename, e.job, e.sal, e.deptno
from (select e.ename,
e.job,
e.sal,
e.deptno,
rank() over(partition by e.deptno order by e.sal desc) rank
from scott.emp e) e
where e.rank = 1;

方法三:dense_rank() over(partition by...order by ...)

select e.ename, e.job, e.sal, e.deptno
from (select e.ename,
e.job,
e.sal,
e.deptno,
dense_rank() over(partition by e.deptno order by e.sal desc) rank
from scott.emp e) e
where e.rank = 1;

三个方法结果一致。

over: 在什么条件之上。
partition by e.deptno:  按部门编号划分(分区)。
order by e.sal desc:  按工资从高到低排序(使用rank()/dense_rank() 时,必须要带order by否则非法)
rank()/dense_rank():  分级
整个语句的意思就是:在按部门划分的基础上,按工资从高到低对雇员进行分级,“级别”由从小到大的数字表示(最小值一定为1)。

那么rank()和dense_rank()有什么区别呢?
rank():  跳跃排序,如果有两个第一级时,接下来就是第三级。
dense_rank():  连续排序,如果有两个第一级时,接下来仍然是第二级。

rank()的结果:

ENAME   JOB              SAL         DEPTNO    RANK

SCOTT    ANALYST     3000.00   20                1
FORD      ANALYST     3000.00   20                1
JONES    MANAGER   2975.00   20               
ADAMS   CLERK         1100.00    20                4

dense_rank()的结果:

ENAME   JOB              SAL         DEPTNO    RANK

SCOTT    ANALYST     3000.00   20                1
FORD      ANALYST     3000.00   20                1
JONES    MANAGER   2975.00   20               
ADAMS   CLERK         1100.00    20                3

rank()第三列序号是3,dense_rank()第三列序号是2

Oracle高级查询之OVER的更多相关文章

  1. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  2. Oracle高级查询,over 用法

    注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...

  3. Oracle高级查询之CONNECT BY

    为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. Oracle中的select语句可以用start with ... connect by prior ...子句实现递 ...

  4. Oracle 高级查询

    Oracle SQL 一些函数用法 以下sql环境都是在 Oracle 11g/scott完成 Group by 与GROUP BY一起使用的关建字 GROUPING,GROUP SET,ROLLUP ...

  5. Oracle高级查询、事物、过程及函数

    一.SQL函数 1.分类:单行函数(日期.数值.转换.字符等),多行函数,也称为分组函数(max.min.avg.sum.row_number.rank等). 2.数值函数 abs(n):求数字n的绝 ...

  6. Oracle高级查询,事物,过程及函数

    一 数值函数 数值 abs,ceil,floor,round,trunc字符串 instr,substr SQL>SELECT 'ABS':'|| ABS(-12.3) FROM DUAL; 运 ...

  7. Oracle 高级查询、事物、过程及函数

    一.Sql函数 1.数值函数(输入参数和返回值都是数值型,多数函数精确到38位) --多少次方 ,) from dual; --开方 ) from dual; --绝对值 ) from dual; - ...

  8. Oracle高级查询之over(partition by...)

    现有表,数据如下: eg1:查询年龄第二的队员 通常写法: select * from (select a.*, rownum r from (select t.* from l_student_in ...

  9. oracle高级查询练习题

    1.  列出员工表中每个部门的员工数和部门编号 Select deptno,count(*) from emp group by deptno; 补充1:列出员工表中,员工人数大于3的部门编号和员工人 ...

随机推荐

  1. oracle第二天笔记

    多表查询 /* 多表查询: 笛卡尔积: 实际上是两张表的乘积,但是在实际开发中没有太大意义 格式: select * from 表1,表2 */ select * from emp; select * ...

  2. linux 一种小的性能优化手段

    在编写内核模块的过程中,我们经常会创建percpu的hash表,比如定义结构如下: struct A { int a: int b: struct hlist_node   hlist_node;-- ...

  3. ReactiveX 学习笔记(11)对 LINQ 的扩展

    Interactive Extensions(Ix) 本文的主题为对 Ix 库,对 LINQ 的扩展. Buffer Ix.NET Buffer Ix.NET BufferTest Buffer 方法 ...

  4. Angular2学习笔记

    Angular2 这里 Angular2 是指采用 TypeScript 语言的 Angular 2.0及以上版本.与采用 JavaScript 语言的 AngularJS 相比,Angular2 不 ...

  5. 查看Linux物理CPU个数

    查看内核版本 lsb_release -a 查看物理CPU个数.核数.逻辑CPU个数 (1)具有相同core id的CPU是同一个core的超线程. (2)具有相同physical id的CPU是同一 ...

  6. Android Bug:Error:com.android.dex.DexException: Multiple dex files define Landroid/support/design/widget/CoordinatorLayout$LayoutParams;

    项目编译通过,运行时出现异常: Error:com.android.dex.DexException: Multiple dex files define Landroid/support/desig ...

  7. Python模块和类.md

    模块的定义 代码的层次结构 对于python的层次结构一般为包->模块 包也就是文件夹,但是文件夹下必须有文件"init.py"那么此文件夹才可以被识别为包."in ...

  8. django 认证系统--1

    django的认证系统提供认证和授权两种功能 认证系统包括如下部分: 1.Users 2.Permissions 主要是以 YES/NO 的形式反映一个用户是否能够做某事 3.Groups:就是对多个 ...

  9. 小程序:pages/index/index/出现脚本错误或未正确调用Page()

    第一次尝试玩小程序,配置好以后报错.pages/index/index/出现脚本错误或未正确调用Page() 才发现解决的方式是:新建的文件默认是没有page()的,所以你需要在.js文件中加上Pag ...

  10. Java学习07 (第一遍) - Spring MVC

    跳过Struts2,直接学习Spring MVC MVC,自己画的 属性(Property/Attribute),事件(Event),方法(method/procedure),函数(Function) ...