orcale的rank(排名函數)實例

詳解:http://www.jb51.net/article/51627.htm數據庫

注意:使用rank()over(order by 排序字段 順序)排序的時候,空值是最大的
(若是排序字段爲null,可能形成在排序時將null字段排在最前面,影響排序的正確性。
因此建議將dense_rank()over(order by 列名 排序)改成dense_rank()over(order by 列名 排序 nulls last)
這樣只要排序字段爲null,就會放在最後,而不會影響排序結果).
 函數

問題:.net

分區與分組有什麼區別?htm

分區使用的是rank() over (partition by 分區字段 order by 排序字段 順序), 分組使用的是 group by 分組字段排序

·分區只是將原始數據進行名次排列(記錄數不變),it

·分組是對原始數據進行聚合統計(記錄數變少,每組返回一條),注意:聚合。io

--------------------------------------------------------------------------------------------ast

 

1.兩種計算方式(連續,不連續),對應函數:dense_rank,rank。select

 

2.兩種排名方式(分區和不分區):使用和不使用partition。語法

語法:

rank() over (order by 排序字段 順序)

rank() over (partition by 分區字段 order by 排序字段 順序),

---------------------------------------------------------------------------------

1,實例:查詢各學生科目爲Oracle排名(簡單排名)

select sc.s_id,sc.s_name,sub_name,sc.score,

rank() over (order by score desc) 名次

from t_score sc

where sub_name='Oracle'

2.對比:rank()與dense_rank():非連續排名與連續排名(都是簡單排名)

select sc.s_id,sc.s_name,sub_name,sc.score,

dense_rank() over (order by score desc) 名次

from t_score sc

where sub_name='Oracle'

數據庫中有兩個並列的第一名

區別:使用rank進行的排名,結果是不連續的 :1 1 3

使用dense_rank進行的排名,結果是連續的: 1 1 2

3.查詢各學生各科排名(分區排名)

select sc.s_id,sc.s_name,sub_name,sc.score,

rank() over

(partition by sub_name(這個是學科的名字) order by score desc) 名次

from t_score sc

相關文章
相關標籤/搜索