程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle SQL中的RANK

Oracle SQL中的RANK

編輯:Oracle數據庫基礎

其實現在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

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved