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)特性,文檔看起來比較費(fèi)勁
row_number()和rownum差不多,功能更強(qiáng)一點(diǎn)(可以在各個(gè)分組內(nèi)從1開時(shí)排序)
rank()是跳躍排序,有兩個(gè)第二名時(shí)接下來就是第四名(同樣是在各個(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)特性,文檔看起來比較費(fèi)勁
row_number()和rownum差不多,功能更強(qiáng)一點(diǎn)(可以在各個(gè)分組內(nèi)從1開時(shí)排序)
rank()是跳躍排序,有兩個(gè)第二名時(shí)接下來就是第四名(同樣是在各個(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)文章
PL/SQL Developer連接64位的Oracle圖文教程
這篇文章主要為大家詳細(xì)介紹了PL/SQL Developer連接64位的Oracle圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
oracle異常(預(yù)定義異常,自定義異常)應(yīng)用介紹
在開發(fā)過程中,經(jīng)常會(huì)遇到一些測試,這時(shí)候就會(huì)想了解測試的過程,然后再根據(jù)過程分析代碼錯(cuò)在哪里,這種情況下,就需要用到自定義異常,需要了解的朋友可以參考本文2012-11-11
oracle監(jiān)控某表變動(dòng)觸發(fā)器例子(監(jiān)控增,刪,改)
這篇文章主要介紹了oracle監(jiān)控某表變動(dòng)觸發(fā)器例子(監(jiān)控增,刪,改),用于監(jiān)控某表的變動(dòng)并生成日志記錄到另一個(gè)表,需要的朋友可以參考下2014-04-04
解決Hibernate JPA中insert插入數(shù)據(jù)后自動(dòng)執(zhí)行select last_insert_id()
這篇文章主要介紹了Hibernate JPA中insert插入數(shù)據(jù)后自動(dòng)執(zhí)行select last_insert_id()的解決方法。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
Linux系統(tǒng)(X64)安裝Oracle11g完整安裝圖文教程另附基本操作
因項(xiàng)目需求,需要在64位linux系統(tǒng)中安裝Oracle 11g,在網(wǎng)上查了很多內(nèi)容,結(jié)合自己的實(shí)際經(jīng)驗(yàn),終于安裝成功,記錄下來,分享給有需要的同志們,不謝哈!^_^2014-08-08
Oracle數(shù)據(jù)庫創(chuàng)建存儲(chǔ)過程的示例詳解
這篇文章主要介紹了Oracle數(shù)據(jù)庫創(chuàng)建存儲(chǔ)過程的示例詳解,存儲(chǔ)過程是事先經(jīng)過編譯并存儲(chǔ)在數(shù)據(jù)庫中的一段SQL語句的集合,調(diào)用存儲(chǔ)過程可以簡化應(yīng)用開發(fā)人員的很多工作。對(duì)此感興趣可以了解一下2020-07-07

