rank() over,dense_rank() over,row_number() over的區別 1.rank() over:查出指定條件後的進行排名。特點是,加入是對學生排名,使用這個函數,成績相同的兩名是併列,下一位同學空出所占的名次。 select name,subject,score,r ...
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;