Oracle分析函式RANK(),ROW_NUMBER(),LAG()等的使用方法(轉)
Oracle分析函式RANK(),ROW_NUMBER(),LAG()等的使用方法[@more@]ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根據COL1分組,在分組內部根據 COL2排序
而這個值就表示每組內部排序後的順序編號(組內連續的唯一的)
RANK() 類似,不過RANK 排序的時候跟派名次一樣,可以並列2個第一名之後 是第3名
LAG 表示 分組排序後 ,組內後面一條記錄減前面一條記錄的差,第一條可返回 NULL
BTW: EXPERT ONE ON ONE 上講的最詳細,還有很多相關特性,文件看起來比較費勁
row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開時排序)
rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內)
dense_rank()l是連續排序,有兩個第二名時仍然跟著第三名。
相比之下row_number是沒有重複值的
lag(arg1,arg2,arg3):
arg1是從其他行返回的表示式
arg2是希望檢索的當前行分割槽的偏移量。是一個正的偏移量,時一個往回檢索以前的行的數目。
arg3是在arg2表示的數目超出了分組的範圍時返回的值。
SQL> set pagesize 100;
SQL> select rownum from emp;
ROWNUM
----------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
已選擇14行。
已用時間: 00: 00: 00.10
SQL> select deptno,row_number() over(partition by deptno order by sal) from emp order by deptno;
DEPTNO ROW_NUMBER()OVER(PARTITIONBYDEPTNOORDERBYSAL)
---------- ---------------------------------------------
10 1
2
3
20 1
2
3
4
5
30 1
2
3
4
5
6
已選擇14行。
已用時間: 00: 00: 00.41
SQL> select deptno,rank() over (partition by deptno order by sal) from emp order by deptno;
DEPTNO RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
---------- ---------------------------------------
10 1
2
3
20 1
2
3
4
4
30 1
2
2
4
5
6
已選擇14行。
已用時間: 00: 00: 00.21
SQL> select deptno,dense_rank() over(partition by deptno order by sal) from emp order by deptno;
DEPTNO DENSE_RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
---------- ---------------------------------------------
10 1
2
3
20 1
2
3
4
4
30 1
2
2
3
4
5
已選擇14行。
已用時間: 00: 00: 00.20
SQL> select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) from emp ord
er by deptno;
DEPTNO ENAME SAL LAG(ENAME,
---------- ---------- ---------- ----------
10 CLARK 2450
KING 5000 CLARK
MILLER 1300 KING
20 ADAMS 1100
FORD 3000 ADAMS
JONES 2975 FORD
SCOTT 3000 JONES
SMITH 800 SCOTT
30 ALLEN 1600
BLAKE 2850 ALLEN
JAMES 950 BLAKE
MARTIN 1250 JAMES
TURNER 1500 MARTIN
WARD 1250 TURNER
已選擇14行。
已用時間: 00: 00: 00.31
SQL> select deptno,ename,sal,lag(ename,2,'example') over(partition by deptno order by ename) from em
p order by deptno;
DEPTNO ENAME SAL LAG(ENAME,
---------- ---------- ---------- ----------
10 CLARK 2450 example
KING 5000 example
MILLER 1300 CLARK
20 ADAMS 1100 example
FORD 3000 example
JONES 2975 ADAMS
SCOTT 3000 FORD
SMITH 800 JONES
30 ALLEN 1600 example
BLAKE 2850 example
JAMES 950 ALLEN
MARTIN 1250 BLAKE
TURNER 1500 JAMES
WARD 1250 MARTIN
已選擇14行。
表示根據COL1分組,在分組內部根據 COL2排序
而這個值就表示每組內部排序後的順序編號(組內連續的唯一的)
RANK() 類似,不過RANK 排序的時候跟派名次一樣,可以並列2個第一名之後 是第3名
LAG 表示 分組排序後 ,組內後面一條記錄減前面一條記錄的差,第一條可返回 NULL
BTW: EXPERT ONE ON ONE 上講的最詳細,還有很多相關特性,文件看起來比較費勁
row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開時排序)
rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內)
dense_rank()l是連續排序,有兩個第二名時仍然跟著第三名。
相比之下row_number是沒有重複值的
lag(arg1,arg2,arg3):
arg1是從其他行返回的表示式
arg2是希望檢索的當前行分割槽的偏移量。是一個正的偏移量,時一個往回檢索以前的行的數目。
arg3是在arg2表示的數目超出了分組的範圍時返回的值。
SQL> set pagesize 100;
SQL> select rownum from emp;
ROWNUM
----------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
已選擇14行。
已用時間: 00: 00: 00.10
SQL> select deptno,row_number() over(partition by deptno order by sal) from emp order by deptno;
DEPTNO ROW_NUMBER()OVER(PARTITIONBYDEPTNOORDERBYSAL)
---------- ---------------------------------------------
10 1
2
3
20 1
2
3
4
5
30 1
2
3
4
5
6
已選擇14行。
已用時間: 00: 00: 00.41
SQL> select deptno,rank() over (partition by deptno order by sal) from emp order by deptno;
DEPTNO RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
---------- ---------------------------------------
10 1
2
3
20 1
2
3
4
4
30 1
2
2
4
5
6
已選擇14行。
已用時間: 00: 00: 00.21
SQL> select deptno,dense_rank() over(partition by deptno order by sal) from emp order by deptno;
DEPTNO DENSE_RANK()OVER(PARTITIONBYDEPTNOORDERBYSAL)
---------- ---------------------------------------------
10 1
2
3
20 1
2
3
4
4
30 1
2
2
3
4
5
已選擇14行。
已用時間: 00: 00: 00.20
SQL> select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) from emp ord
er by deptno;
DEPTNO ENAME SAL LAG(ENAME,
---------- ---------- ---------- ----------
10 CLARK 2450
KING 5000 CLARK
MILLER 1300 KING
20 ADAMS 1100
FORD 3000 ADAMS
JONES 2975 FORD
SCOTT 3000 JONES
SMITH 800 SCOTT
30 ALLEN 1600
BLAKE 2850 ALLEN
JAMES 950 BLAKE
MARTIN 1250 JAMES
TURNER 1500 MARTIN
WARD 1250 TURNER
已選擇14行。
已用時間: 00: 00: 00.31
SQL> select deptno,ename,sal,lag(ename,2,'example') over(partition by deptno order by ename) from em
p order by deptno;
DEPTNO ENAME SAL LAG(ENAME,
---------- ---------- ---------- ----------
10 CLARK 2450 example
KING 5000 example
MILLER 1300 CLARK
20 ADAMS 1100 example
FORD 3000 example
JONES 2975 ADAMS
SCOTT 3000 FORD
SMITH 800 JONES
30 ALLEN 1600 example
BLAKE 2850 example
JAMES 950 ALLEN
MARTIN 1250 BLAKE
TURNER 1500 JAMES
WARD 1250 MARTIN
已選擇14行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-921235/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle分析函式Rank, Dense_rank, row_numberOracle函式
- oracle 分析函式之(rank()/dense_rank()/row_number())Oracle函式
- lead lag rank()over()dense_rank()row_number()over()rollupcube幾大分析函式函式
- 分析函式rank() row_number函式
- rank,dense_rank,row_number 分析函式函式
- 分析函式——排序排列(rank、dense_rank、row_number)函式排序
- 分析函式中rank(),row_number(),dense_rank()的區別函式
- Spark2 Dataset分析函式--排名函式row_number,rank,dense_rank,percent_rankSpark函式
- 分析函式rank,dense_rank,row_number使用和區別 .函式
- 【函式】Oracle中聚合函式rank()使用方法函式Oracle
- 【SQL】Lag/Rank/Over視窗函式揭秘,資料分析之旅SQL函式
- SQL SERVER 排序函式ROW_NUMBER、RANK、DENSE_RANK、NTILESQLServer排序函式
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- 分析函式 - LAG函式
- oracle中聚合函式RANK和dense_rank的使用(轉)Oracle函式
- 分析函式DENSE_RANK 和 RANK函式
- Oracle:Rank,Dense_Rank,Row_Number比較Oracle
- Oracle 中分析函式用法之--rank(),dense_rank(),partition,over()Oracle函式
- oracle lag與lead分析函式簡介Oracle函式
- Oracle 中的 ROW_NUMBER() OVER() 分析函式的用法Oracle函式
- 【Analytic】分析函式之RANK函式函式
- 【SQL 學習】分析函式之RANK() DENSE_RANK ()SQL函式
- oracle之函式LAG,LEADOracle函式
- ROW_NUMBER() OVER() 分析函式的用法函式
- 【Analytic】分析函式之ROW_NUMBER函式函式
- 【Analytic】分析函式之DENSE_RANK函式函式
- Oracle vs PostgreSQL Develop(14) - 分析函式KEEP DENSE_RANKOracleSQLdev函式
- [Oracle]高效的SQL語句之分析函式(四)--lag()/lead()OracleSQL函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- oracle函式之lag和leadOracle函式
- oracle中lead和lag函式Oracle函式
- 有關oracle中聚合函式rank和dense_rank的使用Oracle函式
- Oracle分析函式之LEAD和LAG實際應用Oracle函式
- oracle 分析函式(轉)Oracle函式
- Oracle分析函式{轉}Oracle函式
- Hive中row_number()、dense_rank()、rank()的區別Hive
- 分析函式——keep(dense_rank first/last)函式AST
- 分析函式學習3 ROW_NUMBER函式