row_number() OVER(PARTITION BY)函数介绍

OVER(PARTITION BY)函数介绍

开窗函数          
     Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

      开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化,举例如下:
1:over后的写法:    
   over(order by salary) 按照salary排序进行累计,order by是个默认的开窗函数
   over(partition by deptno)按照部门分区

 

    over(partition by deptno order by salary)

 

2:开窗的窗口范围
over(order by salary range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。

举例:

 

--sum(s)over(order by s range between 2 preceding and 2 following) 表示加2或2的范围内的求和

 select name,class,s, sum(s)over(order by s range between 2 preceding and 2 following) mm from t2
adf         3         45         45   --45加2减2即43到47,但是s在这个范围内只有45
asdf        3         55         55
cfe         2         74         74
3dd         3         78         158 --78在76到80范围内有78,80,求和得158
fda         1         80         158
gds         2         92         92
ffd         1         95         190
dss         1         95         190
ddd         3         99         198

gf         3        99        198

 

 

 

over(order by salary   rows  between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。

举例:

 

--sum(s)over(order by s rows between 2 preceding and 2 following)表示在上下两行之间的范围内
select name,class,s, sum(s)over(order by s rows between 2 preceding and 2 following) mm from t2
adf         3         45         174   (45+55+74=174)
asdf        3         55         252    (45+55+74+78=252)
cfe         2         74         332     (74+55+45+78+80=332)
3dd         3         78         379     (78+74+55+80+92=379)
fda         1         80         419
gds         2         92         440
ffd         1         95         461
dss         1         95         480
ddd         3         99         388
gf          3         99         293

 

 

over(order by salary  range between unbounded preceding and unbounded following)或者
over(order by salary  rows between unbounded preceding and unbounded following):窗口不做限制

 

3、与over函数结合的几个函数介绍

row_number()over()、rank()over()和dense_rank()over()函数的使用

下面以班级成绩表t2来说明其应用

t2表信息如下:
cfe         2         74
dss         1         95
ffd         1         95
fda         1         80
gds         2         92
gf          3         99
ddd         3         99
adf         3         45
asdf        3         55
3dd         3         78

select * from                                                                      
     (                                        

你可能感兴趣的:(Oracle)