Oracle分析函数over及开窗函数
2008-08-30 12:44:49 来源:WEB开发网gds 2 92 1
gf 3 99 1
ddd 3 99 1
注意:
1.在求第一名成绩的时候,不能用row_number(),因为如果同班有两个并列第一,row_number()只返回一个结果
2.rank()和dense_rank()的区别是:
--rank()是跳跃排序,有两个第二名时接下来就是第四名
--dense_rank()l是连续排序,有两个第二名时仍然跟着第三名
3.分类统计 (并显示信息)
A B C
-- -- ----------------------
m a 2
n a 3
m a 2
n b 2
n b 1
x b 3
x b 2
x b 4
h b 3
selecta,c,sum(c)over(partitionbya)fromt2
得到结果:
A B C SUM(C)OVER(PARTITIONBYA)
-- -- ------- ------------------------
h b 3 3
m a 2 4
m a 2 4
n a 3 6
n b 2 6
n b 1 6
x b 3 9
x b 2 9
x b 4 9
如果用sum,group by 则只能得到
A SUM(C)
-- ----------------------
h 3
m 4
n 6
x 9
无法得到B列值
=====
二:开窗函数
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
1.
over(orderbysalary)按照salary排序进行累计,orderby是个默认的开窗函数
over(partitionbydeptno)按照部门分区
2.
over(orderbysalaryrangebetween5precedingand5following)
每行对应的数据窗口是之前行幅度值不超过5,之后行幅度值不超过5
例如:对于以下列
aa
1
2
2
2
3
4
5
6
7
9
sum(aa)over(orderbyaarangebetween2precedingand2following)
得出的结果是
A A SUM
---------------------- -------------------------------------------------------
1 1 0
2 1 4
2 1 4
2 1 4
3 1 8
4 1 8
5 2 2
6 1 8
7 2 2
9 9
就是说,对于aa=5的一行 ,sum为 5-1<=aa<=5+2 的和
对于aa=2来说 ,sum=1+2+2+2+3+4=14 ;
又如 对于aa=9 ,9-1<=aa<=9+2 只有9一个数,所以sum=9 ;
3:其它:
over(orderbysalaryrowsbetween2precedingand4following)
每行对应的数据窗口是之前2行,之后4行
over(orderbysalaryrowsbetween2precedingand4following)
每行对应的数据窗口是之前2行,之后4行
4:下面三条语句等效:
over(orderbysalaryrowsbetweenunboundedprecedingandunboundedfollowing)
每行对应的数据窗口是从第一行到最后一行,等效:
over(orderbysalaryrangebetweenunboundedprecedingandunboundedfollowing)
等效
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
赞助商链接