rank() over,dense_rank() over,row_number() over的區(qū)別
1.rank() over:查出指定條件后的進(jìn)行排名液肌。特點(diǎn)是挟炬,加入是對(duì)學(xué)生排名,使用這個(gè)函數(shù),成績(jī)相同的兩名是并列辟宗,下一位同學(xué)空出所占的名次爵赵。
select name,subject,score,rank() over(partition by subject order by score desc) rankfrom student_score;
2.dense_rank() over:與ran() over的區(qū)別是,兩名學(xué)生的成績(jī)并列以后泊脐,下一位同學(xué)并不空出所占的名次空幻。
select name,subject,score,dense_rank() over(partition by subject order by score desc) rankfrom student_score;
3.row_number() over這個(gè)函數(shù)不需要考慮是否并列,哪怕根據(jù)條件查詢出來的數(shù)值相同也會(huì)進(jìn)行連續(xù)排名
select name,subject,score,row_number() over(partition by subject order by score desc) rankfrom student_score;
4.使用rank() over的時(shí)候容客,空值是最大的秕铛,如果排序字段為null,可能造成null字段排在最前面,影響排序結(jié)果缩挑〉剑可以這樣:rank() over(partition by course order by score desc nulls last)來規(guī)避這個(gè)問題。
select name,subject,score,rank() over(partition by subject order by score desc nulls last) rankfrom student_score;