有關oracle中聚合函式rank和dense_rank的使用
其實現在Oracle對於rank和dense_rank已經支援合計功能,不過這次我僅僅使用了其分析功能。具體語法如下:RANK ( ) OVER ( [query_partition_clause] order_by_clause )。
下面給出一些來自網上的示例:
TABLE:S (subject,mark)
數學,80
語文,70
數學,90
數學,60
數學,100
語文,88
語文,65
語文,77
現在我想要的結果是:每門科目的前3名的分數
數學,100
數學,90
數學,80
語文,88
語文,77
語文,70
那麼語句就這麼寫:
select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T
where T.rk<=3;
dense_rank與rank()用法相當,但是有一個區別:dence_rank在處理相同的等級時,等級的數值不會跳過。rank則跳過。
例如:表
A B C
a liu wang
a jin shu
a cai kai
b yang du
b lin ying
b yao cai
b yang 99
例如:當rank時為:
select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m
A B C LIU
a cai kai 1
a jin shu 2
a liu wang 3
b lin ying 1
b yang du 2
b yang 99 2
b yao cai 4
而如果用dense_rank時為:
select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m
A B C LIU
a cai kai 1
a jin shu 2
a liu wang 3
b lin ying 1
b yang du 2
b yang 99 2
b yao cai 3
[@more@]
下面給出一些來自網上的示例:
TABLE:S (subject,mark)
數學,80
語文,70
數學,90
數學,60
數學,100
語文,88
語文,65
語文,77
現在我想要的結果是:每門科目的前3名的分數
數學,100
數學,90
數學,80
語文,88
語文,77
語文,70
那麼語句就這麼寫:
select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T
where T.rk<=3;
dense_rank與rank()用法相當,但是有一個區別:dence_rank在處理相同的等級時,等級的數值不會跳過。rank則跳過。
例如:表
A B C
a liu wang
a jin shu
a cai kai
b yang du
b lin ying
b yao cai
b yang 99
例如:當rank時為:
select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m
A B C LIU
a cai kai 1
a jin shu 2
a liu wang 3
b lin ying 1
b yang du 2
b yang 99 2
b yao cai 4
而如果用dense_rank時為:
select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m
A B C LIU
a cai kai 1
a jin shu 2
a liu wang 3
b lin ying 1
b yang du 2
b yang 99 2
b yao cai 3
[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9907339/viewspace-1047948/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle vs PostgreSQL Develop(14) - 分析函式KEEP DENSE_RANKOracleSQLdev函式
- mysql自動排序函式dense_rank() over()、rank() over()、row_num() over()用法和區別MySql排序函式
- Hive中row_number()、dense_rank()、rank()的區別Hive
- 7.78 DENSE_RANK
- Hive ROW_NUMBER,RANK(),DENSE_RANK()Hive
- Oracle OCP(04):聚合函式Oracle函式
- Oracle中Decode()函式的使用Oracle函式
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- 原創:oracle聚合函式介紹Oracle函式
- spark中的聚合函式總結Spark函式
- SQL-函式 - 聚合函式SQL函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- mongoDB中聚合函式java處理MongoDB函式Java
- Laravel 中使用帶有條件聚合函式計算總數Laravel函式
- Django:聚合函式Django函式
- Stream聚合函式函式
- Shell中函式的定義和使用函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- 6、Oracle中的分組函式Oracle函式
- Rust中的into函式和from函式Rust函式
- 請問:hive中avg聚合函式會使用到combiner功能嗎?Hive函式
- Django(18)聚合函式Django函式
- Python利用partial偏函式生成不同的聚合函式Python函式
- 有關箭頭函式函式
- linux下時間有關的函式和結構體Linux函式結構體
- JavaScript中的compose函式和pipe函式JavaScript函式
- DX12龍書 02 - DirectXMath 庫中與向量有關的類和函式函式
- Oracle中pivot函式詳解Oracle函式
- 工作中,Oracle常用函式Oracle函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- Oracle中的正規表示式(及函式)詳解Oracle函式
- oracle 函式Oracle函式
- oracle or 函式Oracle函式
- Processing中PImage類和loadImage()、createImage()函式的相關解析函式
- SQL Server資料庫————模糊查詢和聚合函式SQLServer資料庫函式
- MySQL全面瓦解10:分組查詢和聚合函式MySql函式
- Django中F函式的使用Django函式
- vue2專案中 箭頭函式和普通函式里面 this的指向有何不同?Vue函式