orcale的rank(排名函数)实例
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
詳解:http://www.jb51.net/article/51627.htm
注意:使用rank()over(order by 排序字段 順序)排序的時(shí)候,空值是最大的
(如果排序字段為null,可能造成在排序時(shí)將null字段排在最前面,影響排序的正確性。
所以建議將dense_rank()over(order by 列名 排序)改為dense_rank()over(order by 列名 排序 nulls last)
這樣只要排序字段為null,就會(huì)放在最后,而不會(huì)影響排序結(jié)果).
?
問(wèn)題:
分區(qū)與分組有什么區(qū)別?
分區(qū)使用的是rank() over (partition by 分區(qū)字段 order by 排序字段 順序), 分組使用的是 group by 分組字段
·分區(qū)只是將原始數(shù)據(jù)進(jìn)行名次排列(記錄數(shù)不變),
·分組是對(duì)原始數(shù)據(jù)進(jìn)行聚合統(tǒng)計(jì)(記錄數(shù)變少,每組返回一條),注意:聚合。
--------------------------------------------------------------------------------------------
?
1.兩種計(jì)算方式(連續(xù),不連續(xù)),對(duì)應(yīng)函數(shù):dense_rank,rank。
?
2.兩種排名方式(分區(qū)和不分區(qū)):使用和不使用partition。
語(yǔ)法:
rank() over (order by 排序字段 順序)
rank() over (partition by 分區(qū)字段 order by 排序字段 順序),
---------------------------------------------------------------------------------
1,實(shí)例:查詢各學(xué)生科目為Oracle排名(簡(jiǎn)單排名)
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.對(duì)比:rank()與dense_rank():非連續(xù)排名與連續(xù)排名(都是簡(jiǎn)單排名)
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'
數(shù)據(jù)庫(kù)中有兩個(gè)并列的第一名
區(qū)別:使用rank進(jìn)行的排名,結(jié)果是不連續(xù)的 :1 1 3
使用dense_rank進(jìn)行的排名,結(jié)果是連續(xù)的: 1 1 2
3.查詢各學(xué)生各科排名(分區(qū)排名)
select sc.s_id,sc.s_name,sub_name,sc.score,
rank() over
(partition by sub_name(這個(gè)是學(xué)科的名字)?order by score desc) 名次
from t_score sc
?
轉(zhuǎn)載于:https://my.oschina.net/u/2870118/blog/806913
總結(jié)
以上是生活随笔為你收集整理的orcale的rank(排名函数)实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 钱塘江在哪里
- 下一篇: 元气骑士毒弓是什么 『元气骑士』5.0.