Oracle高级查询之OVER (PARTITION BY ..)
一、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 ..)相关推荐
- Oracle高级查询之over(partition by...) 分组排序
Oracle高级查询之over(partition by...) 分组排序 一.rank()/dense_rank() over(partition by ...order by ...) 现在客户有 ...
- Oracle高级查询之over(partition by..)
查看原文:http://ibloger.net/article/248.html 为了方便学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. create table EMP (em ...
- 傅老师课堂:Oracle高级查询之OVER (PARTITION BY ..)
[size=large][size=large][size=large]开篇一笑:某日一妹子对男友说:在一起这么久了你都没有夸过我漂亮,今天我要你夸夸我,男子想了一会看着女友鸡冻的说道:我硬了. 为了 ...
- 傅老师课堂:Oracle高级查询之OVER (PARTITION BY ..) 1
为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. 注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_r ...
- oracle高级查询案例,oracle高级查询(实例基于scott用户四张表)
oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...
- oracle—高级查询
Sql基础 数据库语言 数据操纵语言:DML (data manipulation language) select insert update delete merge 数据定义语言:DDL(dat ...
- Oracle高级查询
使用Oracle特有的查询语法, 可以达到事半功倍的效果 1. 树查询 create table tree ( id number(10) not null primary key, ...
- by max over partition_Oracle高级查询之over(partition by...)
为了方便学习和测试,所有的例子都是在Oracle自带用户Scott下建立的. create table EMP ( empno NUMBER(4) not null, ename VARC ...
- Oracle高级查询,over 用法
注:标题中的红色order by是说明在使用该方法的时候必须要带上order by. 一.rank()/dense_rank() over(partition by ...order by ...) ...
最新文章
- poj2387(SPFA算法)
- 【408预推免复习】计算机组成原理之指令系统
- python编程语法-Python学习笔记(Ⅰ)——Python程序结构与基础语法
- 三位分节制顺口溜_1-3年级基础知识顺口溜!
- 怎样在黑窗口中查找各种端口
- 求两个字符串的最长公共字串(连续)
- oracel Pipelined pipe row的用法
- Vue 学习笔记 — css属性计算的问题
- html标签的补充—— b,strong标签
- [原]超快速搞定linux的vnc
- 《算法竞赛入门经典》————竖式问题
- FS68001电动牙刷无线充电IC
- 程序员面试华为,面试官出了这样一个面试题,网友:题目太难了
- 谈谈业务系统的监控报警
- 技能高考计算机专业考什么,2016年技能高考计算机专业考试总结.pdf
- win8 安装双系统 ubuntu 过程
- python scipy.optimize 非线性规划 求解局部最优和全局最优
- 利用Python自制雷霆战机小游戏,娱乐编程,快乐学习!
- 服务产品化,或许是中国软件的出路
- python 实现差商
热门文章
- 死锁产生的原因及四个必要条件
- RS232串口交叉直连
- TI C6000DSP上TCP/IP协议栈的实现
- 填空题C语言,c语言填空题试卷.doc
- php流媒体视频下载,如何使用PHP流媒体文件?
- IO流之过滤流介绍:
- python不定长参数怎么相加_python函数不定长参数使用方法解析
- 场效应与三极管 电路标识符_看懂这6个提示,轻松搞定恒流源电源电路设计!...
- python里help和dir的区别_Python中dir()与help()的使用
- JavaWeb:AJAX