orcale的rank(排名函数)实例
2019獨角獸企業重金招聘Python工程師標準>>>
詳解: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,就會放在最后,而不會影響排序結果).
?
問題:
分區與分組有什么區別?
分區使用的是rank() over (partition by 分區字段 order by 排序字段 順序), 分組使用的是 group by 分組字段
·分區只是將原始數據進行名次排列(記錄數不變),
·分組是對原始數據進行聚合統計(記錄數變少,每組返回一條),注意:聚合。
--------------------------------------------------------------------------------------------
?
1.兩種計算方式(連續,不連續),對應函數:dense_rank,rank。
?
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
?
轉載于:https://my.oschina.net/u/2870118/blog/806913
總結
以上是生活随笔為你收集整理的orcale的rank(排名函数)实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钱塘江在哪里
- 下一篇: Redsi和Memcached区别总结