当前位置:数据库 > Oracle >>

oracle中sql分析函数

oracle中sql分析函数
 
分析函数能够将复杂的需求使用简单的sql实现,而且执行效率较高。
 
测试环境:
 
SQL> select * from v$version where rownum=1;
 
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
 
create table test(name varchar2(20),val number);
insert into test values('a',1);
insert into test values('b',2);
insert into test values('c',3);
insert into test values('d',5);
insert into test values('e',7);
insert into test values('f',9);
insert into test values('g',12);
insert into test values('h',15);
 
SQL> select * from test;
 
NAME                        VAL
-------------------- ----------
a                             1
b                             2
c                             3
d                             5
e                             7
f                             9
g                            12
h                            15
 
1、连需求和
 
SQL> select name,val,sum(val) over(order by name desc) "连需求和" from test;
 
NAME                        VAL   连需求和
-------------------- ---------- ----------
h                            15         15
g                            12         27
f                             9         36
e                             7         43
d                             5         48
c                             3         51
b                             2         53
a                             1         54
 
已选择8行。
 
2、依据差值范围求和
 
SQL> select name,val,sum(val)over(order by val range between 2 preceding and 1 f
ollowing) "范围求和" from test;
 
NAME                        VAL   范围求和
-------------------- ---------- ----------
a                             1          3
b                             2          6
c                             3          6
d                             5          8
e                             7         12
f                             9         16
g                            12         12
h                            15         15
 
已选择8行。
 
SQL> select name,val,sum(val)over(order by val desc range between 2 preceding an
d 1 following ) "范围求和" from test;
 
NAME                        VAL   范围求和
-------------------- ---------- ----------
h                            15         15
g                            12         12
f                             9          9
e                             7         16
d                             5         12
c                             3         10
b                             2          6
a                             1          6
 
已选择8行。
 
3、不连续求和
 
SQL> select name,val,sum(val)over() "不连续求和" from test;
 
NAME                        VAL 不连续求和
-------------------- ---------- ----------
a                             1         54
b                             2         54
c                             3         54
d                             5         54
e                             7         54
f                             9         54
g      
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,