Oracle 分析函數(shù)RANK(),ROW_NUMBER(),LAG()等的使用方法
更新時(shí)間:2009年11月04日 23:37:49 作者:
Oracle分析函數(shù)RANK(),ROW_NUMBER(),LAG()等的使用方法,需要的朋友可以參考下。
ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根據(jù)COL1分組,在分組內(nèi)部根據(jù) COL2排序
而這個(gè)值就表示每組內(nèi)部排序后的順序編號(hào)(組內(nèi)連續(xù)的唯一的)
RANK() 類似,不過RANK 排序的時(shí)候跟派名次一樣,可以并列2個(gè)第一名之后 是第3名
LAG 表示 分組排序后 ,組內(nèi)后面一條記錄減前面一條記錄的差,第一條可返回 NULL
BTW: EXPERT ONE ON ONE 上講的最詳細(xì),還有很多相關(guān)特性,文檔看起來(lái)比較費(fèi)勁
row_number()和rownum差不多,功能更強(qiáng)一點(diǎn)(可以在各個(gè)分組內(nèi)從1開時(shí)排序)
rank()是跳躍排序,有兩個(gè)第二名時(shí)接下來(lái)就是第四名(同樣是在各個(gè)分組內(nèi))
dense_rank()l是連續(xù)排序,有兩個(gè)第二名時(shí)仍然跟著第三名。
相比之下row_number是沒有重復(fù)值的
lag(arg1,arg2,arg3):
arg1是從其他行返回的表達(dá)式
arg2是希望檢索的當(dāng)前行分區(qū)的偏移量。是一個(gè)正的偏移量,時(shí)一個(gè)往回檢索以前的行的數(shù)目。
arg3是在arg2表示的數(shù)目超出了分組的范圍時(shí)返回的值。
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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
表示根據(jù)COL1分組,在分組內(nèi)部根據(jù) COL2排序
而這個(gè)值就表示每組內(nèi)部排序后的順序編號(hào)(組內(nèi)連續(xù)的唯一的)
RANK() 類似,不過RANK 排序的時(shí)候跟派名次一樣,可以并列2個(gè)第一名之后 是第3名
LAG 表示 分組排序后 ,組內(nèi)后面一條記錄減前面一條記錄的差,第一條可返回 NULL
BTW: EXPERT ONE ON ONE 上講的最詳細(xì),還有很多相關(guān)特性,文檔看起來(lái)比較費(fèi)勁
row_number()和rownum差不多,功能更強(qiáng)一點(diǎn)(可以在各個(gè)分組內(nèi)從1開時(shí)排序)
rank()是跳躍排序,有兩個(gè)第二名時(shí)接下來(lái)就是第四名(同樣是在各個(gè)分組內(nèi))
dense_rank()l是連續(xù)排序,有兩個(gè)第二名時(shí)仍然跟著第三名。
相比之下row_number是沒有重復(fù)值的
lag(arg1,arg2,arg3):
arg1是從其他行返回的表達(dá)式
arg2是希望檢索的當(dāng)前行分區(qū)的偏移量。是一個(gè)正的偏移量,時(shí)一個(gè)往回檢索以前的行的數(shù)目。
arg3是在arg2表示的數(shù)目超出了分組的范圍時(shí)返回的值。
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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
已用時(shí)間: 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行。
相關(guān)文章
Oracle用戶自定義異常實(shí)現(xiàn)過程解析
這篇文章主要介紹了Oracle用戶自定義異常實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09一文教會(huì)你配置使用Navicat或PLSQL可視化工具遠(yuǎn)程連接Oracle
Navicat是一款數(shù)據(jù)庫(kù)管理工具,是一個(gè)可多重連線資料庫(kù)的管理工具,下面這篇文章主要給大家介紹了關(guān)于配置使用Navicat或PLSQL可視化工具遠(yuǎn)程連接Oracle的相關(guān)資料,需要的朋友可以參考下2023-04-04Oracle導(dǎo)出導(dǎo)入表結(jié)構(gòu)操作實(shí)戰(zhàn)記錄
在日常數(shù)據(jù)庫(kù)維護(hù)中,經(jīng)常會(huì)遇到導(dǎo)出數(shù)據(jù)表的需求,下面這篇文章主要給大家介紹了關(guān)于Oracle導(dǎo)出導(dǎo)入表結(jié)構(gòu)操作的相關(guān)資料,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02查看oracle數(shù)據(jù)庫(kù)的編碼及修改編碼格式的方法
本節(jié)主要介紹了如何查看oracle數(shù)據(jù)庫(kù)的編碼及修改編碼格式,需要的朋友可以參考下2014-07-07oracle impdp network_link參數(shù)使用介紹
本文將介紹oracle impdp network_link參數(shù)使用方法,需要了解更多的朋友可以參考下2012-11-11Oracle Listener 動(dòng)態(tài)注冊(cè) 與 靜態(tài)注冊(cè)
注冊(cè)就是將數(shù)據(jù)庫(kù)作為一個(gè)服務(wù)注冊(cè)到監(jiān)聽程序??蛻舳瞬恍枰罃?shù)據(jù)庫(kù)名和實(shí)例名,只需要知道該數(shù)據(jù)庫(kù)對(duì)外提供的服務(wù)名就可以申請(qǐng)連接到數(shù)據(jù)庫(kù)2015-12-12