oracle 分析函式之(rank()/dense_rank()/row_number())
1、Rank()函式返回一個唯一的值,除非遇到相同的資料時,此時所有相同資料的排名是一樣的,同時會在最後一條相同記錄和下一條不同記錄的排名之間空出排名。
2、Dense_rank()函式返回一個唯一的值,除非當碰到相同資料時,此時所有相同資料的排名都是一樣的,而且不為後面的資料留出排名空間。
3、Row_number()函式返回一個唯一的值,當碰到相同資料時,排名按照記錄集中記錄的順序依次遞增。
下面看例子吧:
建立測試需要的表:
SQL> create table tangyunoracle
2 (
3 cname VARCHAR2(20),
4 months Number,
5 sales Number
6 );
表已建立。
為測試表中插入一些資料:
SQL> INSERT INTO tangyunoracle VALUES('tangyun',1,100);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tangyun',2,800);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tangyun',3,800);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('huananzixun',1,100);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('huananzixun',2,810);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('huananzixun',3,790);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('ty',1,100);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('ty',2,880);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('ty',3,790);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('oracle',1,100);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('oracle',2,810);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('oracle',3,890);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tgyun',1,120);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tgyun',2,830);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tgyun',3,850);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('yun',1,110);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('yun',2,840);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('yun',3,850);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tang',1,120);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tang',2,830);
已建立 1 行。
SQL> INSERT INTO tangyunoracle VALUES('tang',3,850);
已建立 1 行。
SQL> COMMIT;
提交完成。
對比三個函式對相同順序的排名:
SQL> select cname,rank() over(order by sum(sales) desc) rank,dense_rank() over(order by sum(sales) desc) dense_rank,row_number() over(order by sum(sales) desc)row_number from tangyunoracle group by cname;
CNAME RANK DENSE_RANK ROW_NUMBER
-------------------- ---------- ---------- ----------
oracle 1 1 1
ty 2 2 2
tangyun 3 3 3
huananzixun 3 3 4
yun 5 4 5
tang 5 4 6
tgyun 5 4 7
已選擇7行。
透過這個例子就可以清楚三者之間的區別了。
----------------End-------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24930246/viewspace-1041636/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle分析函式Rank, Dense_rank, row_numberOracle函式
- rank,dense_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函式
- Oracle 中分析函式用法之--rank(),dense_rank(),partition,over()Oracle函式
- SQL SERVER 排序函式ROW_NUMBER、RANK、DENSE_RANK、NTILESQLServer排序函式
- 分析函式DENSE_RANK 和 RANK函式
- 【SQL 學習】分析函式之RANK() DENSE_RANK ()SQL函式
- 【Analytic】分析函式之DENSE_RANK函式函式
- Oracle:Rank,Dense_Rank,Row_Number比較Oracle
- lead lag rank()over()dense_rank()row_number()over()rollupcube幾大分析函式函式
- 分析函式rank() row_number函式
- Oracle vs PostgreSQL Develop(14) - 分析函式KEEP DENSE_RANKOracleSQLdev函式
- 分析函式——keep(dense_rank first/last)函式AST
- oracle中聚合函式RANK和dense_rank的使用(轉)Oracle函式
- 有關oracle中聚合函式rank和dense_rank的使用Oracle函式
- Hive中row_number()、dense_rank()、rank()的區別Hive
- rank() 與dense_rank()分析
- row_number() over,rank() over,dense_rank() over的區別
- Oracle分析函式RANK(),ROW_NUMBER(),LAG()等的使用方法(轉)Oracle函式
- [原創] 小議rank(),dense_rank(),row_number()使用與區別
- 【Analytic】分析函式之RANK函式函式
- 【Analytic】分析函式之ROW_NUMBER函式函式
- mysql自動排序函式dense_rank() over()、rank() over()、row_num() over()用法和區別MySql排序函式
- Oracle 中的 ROW_NUMBER() OVER() 分析函式的用法Oracle函式
- 【函式】Oracle中聚合函式rank()使用方法函式Oracle
- ROW_NUMBER() OVER() 分析函式的用法函式
- 分析函式學習3 ROW_NUMBER函式
- 分析函式row_number()使用一例函式
- RANK函式小結函式
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- SQL語句中的rank () over , row_number() over ,rank_dense ()SQL
- row_number() over函式函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- Oracle分析函式七——分析函式案例Oracle函式
- Oracle聚合函式/分析函式Oracle函式