ORACLE逐行累計求和方法(OVER函數)


sql over的作用及用法 
1.RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 
DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 
可實現按指定的字段分組排序,對於相同分組字段的結果集進行排序, 
其中PARTITION BY 為分組字段,ORDER BY 指定排序字段

2.over不能單獨使用,要和分析函數:rank(),dense_rank(),row_number()等一起使用。 
其參數:over(partition by columnname1 order by columnname2) 
含義:按columname1指定的字段進行分組排序,或者說按字段columnname1的值進行分組排序。

解決實際問題:(實現統計功能中常用) 
1)問題描述:比如查詢記錄有5行,每行記錄有一個數值型的字段。第2行為第1、2行的和;第3行為第1、2、3行的和;第4行為第1、2、3、4行的和;后面依此類推…… 
2)解決辦法:使用Oracle自帶的Over函數。 
如下例子: 
1.建測試表EMP 
– Create table 
create table employee 

DEPTNO NUMBER(4), 
ENAME VARCHAR2(20), 
SAL NUMBER(10) 
); 
2.插入測試數據 
insert into employee (DEPTNO,ENAME,SAL) values (0001,’CLARK’,2450); 
insert into employee (DEPTNO,ENAME,SAL) values (0002,’SMITH’,3000); 
insert into employee (DEPTNO,ENAME,SAL) values (0003,’ALLEN’,1250); 
insert into employee (DEPTNO,ENAME,SAL) values (0004,’JAMES’,950); 
查詢結果如下: 
這里寫圖片描述

3.編寫SQL(用Over函數) 
select deptno, 
sal, 
sum(sal) over (order by deptno) AccSal 
from employee

查詢結果如下: 
這里寫圖片描述

未完待續…


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM