一、rank()/dense_rank() over(partition by ...order by ...)

查询每个部门工资最高的雇员的信息:

1. 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;

2. 使用 rank() over(partition by...)或dense_rank() over(partition 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;

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;

这里补充讲解一下rank()/dense_rank() over(partition by e.deptno order by e.sal desc)语法。
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():  连续排序,如果有两个第一级时,接下来仍然是第二级。

下面再列举一些常用的方法在该语法中的应用(注:带order by子句的方法说明在使用该方法的时候必须要带order by):

select e.ename, 
       e.job, 
       e.sal, 
       e.deptno, 
       first_value(e.sal) over(partition by e.deptno) first_sal, 
       last_value(e.sal) over(partition by e.deptno) last_sal, 
       sum(e.sal) over(partition by e.deptno) sum_sal, 
       avg(e.sal) over(partition by e.deptno) avg_sal, 
       count(e.sal) over(partition by e.deptno) count_num, 
       row_number() over(partition by e.deptno order by e.sal) row_num 
  from scott.emp e;

转载于:https://www.cnblogs.com/changxr/p/5105972.html

Oracle高级查询之OVER (PARTITION BY ..)相关推荐

  1. Oracle高级查询之over(partition by...) 分组排序

    Oracle高级查询之over(partition by...) 分组排序 一.rank()/dense_rank() over(partition by ...order by ...) 现在客户有 ...

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

    查看原文:http://ibloger.net/article/248.html 为了方便学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. create table EMP (em ...

  3. 傅老师课堂:Oracle高级查询之OVER (PARTITION BY ..)

    [size=large][size=large][size=large]开篇一笑:某日一妹子对男友说:在一起这么久了你都没有夸过我漂亮,今天我要你夸夸我,男子想了一会看着女友鸡冻的说道:我硬了. 为了 ...

  4. 傅老师课堂:Oracle高级查询之OVER (PARTITION BY ..) 1

    为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. 注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_r ...

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

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

  6. oracle—高级查询

    Sql基础 数据库语言 数据操纵语言:DML (data manipulation language) select insert update delete merge 数据定义语言:DDL(dat ...

  7. Oracle高级查询

    使用Oracle特有的查询语法, 可以达到事半功倍的效果 1. 树查询 create table tree (     id number(10) not null primary key,      ...

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

    为了方便学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. create table EMP ( empno    NUMBER(4) not null, ename    VARC ...

  9. Oracle高级查询,over 用法

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

最新文章

  1. poj2387(SPFA算法)
  2. 【408预推免复习】计算机组成原理之指令系统
  3. python编程语法-Python学习笔记(Ⅰ)——Python程序结构与基础语法
  4. 三位分节制顺口溜_1-3年级基础知识顺口溜!
  5. 怎样在黑窗口中查找各种端口
  6. 求两个字符串的最长公共字串(连续)
  7. oracel Pipelined pipe row的用法
  8. Vue 学习笔记 — css属性计算的问题
  9. html标签的补充—— b,strong标签
  10. [原]超快速搞定linux的vnc
  11. 《算法竞赛入门经典》————竖式问题
  12. FS68001电动牙刷无线充电IC
  13. 程序员面试华为,面试官出了这样一个面试题,网友:题目太难了
  14. 谈谈业务系统的监控报警
  15. 技能高考计算机专业考什么,2016年技能高考计算机专业考试总结.pdf
  16. win8 安装双系统 ubuntu 过程
  17. python scipy.optimize 非线性规划 求解局部最优和全局最优
  18. 利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!
  19. 服务产品化,或许是中国软件的出路
  20. python 实现差商

热门文章

  1. 死锁产生的原因及四个必要条件
  2. RS232串口交叉直连
  3. TI C6000DSP上TCP/IP协议栈的实现
  4. 填空题C语言,c语言填空题试卷.doc
  5. php流媒体视频下载,如何使用PHP流媒体文件?
  6. IO流之过滤流介绍:
  7. python不定长参数怎么相加_python函数不定长参数使用方法解析
  8. 场效应与三极管 电路标识符_看懂这6个提示,轻松搞定恒流源电源电路设计!...
  9. python里help和dir的区别_Python中dir()与help()的使用
  10. JavaWeb:AJAX