Oralce开窗函数OVER()的一些应用
好久没用oracle了,发现很多东西已经忘记.正好今天改写个语句,顺便回忆了一下,乘热整理以备遗忘.
over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
over(partition by deptno)按照部门分区
over(order by salary range between 50 preceding and 150 following) 每行对应的数据窗口是之前行幅度值不超过50,之后行幅度值不超过150
over(order by salary rows between 50 preceding and 150 following) 每行对应的数据窗口是之前50行,之后150行
over(order by salary rows between unbounded preceding and unbounded following) 每行对应的数据窗口是从第一行到最后一行,等效:
over(order by salary range between unbounded preceding and unbounded following)
主要参考资料:《expert one-on-one》 Tom Kyte 《Oracle9i SQL Reference》第6章
首先我们用语句构建一个临时表,用于下面的演示:
with test as
(
select rownum as n,mod(rownum,2) as grp from dual
connect by rownum<=10
)
select * from test 结果如下:
N GRP
1 1
2 0
3 1
4 0
5 1
6 0
7 1
8 0
9 1
10 0
使用聚合函数
1.AVG
功能描述:用于计算一个组和数据窗口内表达式的平均值。
SAMPLE:下面的例子中计算奇数和偶数列的平均值
with test as
(
select rownum as n,mod(rownum,2) as grp from dual
connect by rownum<=10
)
--后面的例子中将省略去上面部分
select avg(n) over(partition by grp) as avg_n,n
from test
结果:

--加入order by 后的效果,自己观察
select avg(n) over (partition by grp order by n) as avg_n,n
from test

2.CORR
功能描述:返回一对表达式的相关系数
3.COVAR_SAMP
功能描述:返回一对表达式的样本协方差
4.COUNT
功能描述:对一组内发生的事情进行累积计数
5.CUME_DIST
功能描述:计算一行在组中的相对位置
以上都是常见的聚合函数,当然还包括: max,min等等.
区别就是只使用聚合函数将仅显示各个分组的统计结果,和over()联合使用后会同时显示各个样本数据和统计结果.
所以不在一一进行测试,几乎所有的聚合函数都可以这样使用.
排行函数
1.row_number,rank,DENSE_RANK
功能描述:对一组数据按某些属性进行排序,它们之前的区别举例如下:
3个人考试:A 100分 B 100分 C90分
对于row_number来说不允许排名相同结果如下:
A 第1名 B 第2名 C 第3名
rank则允许名次相同:
A 第1名 B 第1名 C 第3名
DENSE_RANK允许名称相同的情况,同时要求排名必须连续:
A 第1名 B 第1名 C 第2名
SAMPLE:
按奇偶数进行分组并进行排序
select row_number() over (partition by grp order by n ) as rn,n
from test
结果:

三者的区别演示:
select rank() over (order by grp) as rk
,DENSE_RANK() over (order by grp) as drk
,row_number() over (order by grp) as rn
,n
from test
结果:

2.Lead,Lag
功能描述:对一组记录排序后,取当前行之后或之前的某一条的值
SAMPLE:按奇偶分组,排序后取后面第2条和前面第2条记录值
select lag(n,2) over(partition by grp order by n) as next_n
,lead(n,2) over (partition by grp order by n) as prev_n
,n,grp
from test
结果如下:

3.Last_value,First_value
功能描述:对一组记录排序后,取所在分组的第一条或最后一条记录
SAMPLE:按奇偶分组,排序后取最后一条和第一条的值
select last_value(n) over(partition by grp order by n) as last_N
,first_value(n) over (partition by grp order by n) as first_n
,n,grp
from test

注意:last 实际是截止到当前行的最后一条记录,这样如果想取最后一条怎么办?当然是用first_value(n) over (partition by grp order by n desc)
正数最后一名就是倒数第一名.
Oralce开窗函数OVER()的一些应用的更多相关文章
- 开窗函数 First_Value 和 Last_Value
在Sql server 2012里面,开窗函数丰富了许多,其中带出了2个新的函数 First_Value 和 Last Value .现在来介绍一下这2个函数的应用场景. 首先分析一下First_Va ...
- Oracle开窗函数 over()(转)
copy文链接:http://blog.csdn.net/yjjm1990/article/details/7524167#,http://www.2cto.com/database/201402/2 ...
- oracle的分析函数over 及开窗函数
转:http://www.2cto.com/database/201310/249722.html oracle的分析函数over 及开窗函数 一:分析函数over Oracle从8.1.6开 ...
- 开窗函数 --over()
一个学习性任务:每个人有不同次数的成绩,统计出每个人的最高成绩. 这个问题应该还是相对简单,其实就用聚合函数就好了. select id,name,max(score) from Student gr ...
- SQL使用开窗函数与CTE查询每月销售额的前几名
WITH tagTab AS( SELECT YearMonth, pm=RANK() OVER(PARTITION BY YearMonth ORDER BY amount DESC) FROM S ...
- 利用OVER开窗函数分页
在SQL Server中,利用SQL进行分页的方法也有很多,今天要总结的是SQL Server 2005中引入的OVER开窗口函数,然后利用开窗函数进行分页. 示例代码如下: -- 设置数据库上下文 ...
- sqlserver开窗函数
从 http://jimshu.blog.51cto.com/3171847/1376637/ 转 开窗函数是在 ISO 标准中定义的.SQL Server 提供排名开窗函数和聚合开窗函数. 在开窗函 ...
- SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649 ...
- sql over开窗函数,
sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单 ...
随机推荐
- spark读hdfs文件实现wordcount并将结果存回hdfs
package iie.udps.example.operator.spark; import scala.Tuple2; import org.apache.spark.SparkConf; imp ...
- 快速对字符转义,避免跨站攻击XSS
XSS已经成为非常流行的网站攻击方式,为了安全起见,尽量避免用户的输入.可是有些情况下不仅不避免,反而要求鼓励输入,比如写博客.博客园开放性很高,可以运行手写的JS.之前比较著名的例子就是,凡是看到某 ...
- iPhone4@iOS7Beta4,第一时间刷上,失望,看来苹果是铁了心往扁平化UI走了。看好我的614,保存好SHSH准备
1 今天早上看到新闻,iOS7Beta4放出了,于是赶紧,在家下载,网速很快.(要是在公司,那50K的速度,估计会疯的) 2 等了一会儿一直在提示准备安装,不等了,再等该迟到了. 3 路上实在忍不住, ...
- Web上下文配置【MvcConfig】
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论. 项目说明如下: 1.db.sql是项目中用到的表,数据库使用的是oracle11g ...
- HashMap的笔记
size表示HashMap中存放KV的数量 capacity译为容量.capacity就是指HashMap中桶的数量.默认值为16.一般第一次扩容时会扩容到64,之后好像是2倍.总之,容量都是2的幂. ...
- CString用法总结
概述:CString是MFC中提供的用于处理字符串的类,是一种很有用的数据类型. 它很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作时方便了很多. 不管怎样,使用CString有很多的特殊 ...
- HDU-4614 Vases and Flowers (线段树区间更新)
题目大意:有n个花瓶,每个花瓶中只能放一朵花.两种操作,一种是从A开始放F朵花,如果有的花瓶中已经有花则跳过这个花瓶,往下一个花瓶放:第二种是将区间[A,B]之间花瓶中的花清空.如果是第一种操作,输出 ...
- 【P1303】苹果二叉树
树归入门题 原题: 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1.我们用一根树枝两端连接的结点 ...
- HTML 5 参考手册
HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML (标准通用标记语言下的一个应用)标准版本:现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML ...
- Linux驱动设计—— 内外存访问
本节对内外存访问做详细的介绍. 驱动程序加载成功的一个关键因素,就是内核能够为驱动程序分配足够的内存空间.这些空间一部分用于驱动程序必要的数据结构,另一部分用于数据的交换.同时,内核也应该具有访问外部 ...