1. 程式人生 > 其它 >ORACLE逐行累計求和方法(OVER函式)(問題描述:比如查詢記錄有5行,每行記錄有一個數值型的欄位。第2行為第1、2行的和;第3行為第1、2、3行的和;第4行為第1、2、3、4行的和;後面依此類推…… )

ORACLE逐行累計求和方法(OVER函式)(問題描述:比如查詢記錄有5行,每行記錄有一個數值型的欄位。第2行為第1、2行的和;第3行為第1、2、3行的和;第4行為第1、2、3、4行的和;後面依此類推…… )

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

查詢結果如下: