rank() over,dense_rank() over,row_number() over的區別


rank() over,dense_rank() over,row_number() over的區別

1.rank() over:查出指定條件后的進行排名。特點是,加入是對學生排名,使用這個函數,成績相同的兩名是並列,下一位同學空出所占的名次。

select name,subject,score,rank() over(partition by subject order by score desc) rankfrom student_score;



 

2.dense_rank() over:與ran() over的區別是,兩名學生的成績並列以后,下一位同學並不空出所占的名次。

select name,subject,score,dense_rank() over(partition by subject order by score desc) rankfrom student_score;


 

3.row_number() over這個函數不需要考慮是否並列,哪怕根據條件查詢出來的數值相同也會進行連續排名

select name,subject,score,row_number() over(partition by subject order by score desc) rankfrom student_score;

 

4.使用rank() over的時候,空值是最大的,如果排序字段為null,可能造成null字段排在最前面,影響排序結果。可以這樣:rank() over(partition by course order by score desc nulls last)來規避這個問題。

select name,subject,score,rank() over(partition by subject order by score desc nulls last) rankfrom student_score;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM