sparksql 分析類函數之分組排名 rank() over, dense_rank(), row_number()


1 假設現在有一張學生表student,學生表中有姓名、分數、課程編號,現在我需要按照課程對學生的成績進行排序。

select * from student

2 rank over ()可以實現對學生排名,特點是成績相同的兩名是並列,如下1 2 2 4 5

select name,course,rank() over(partition by course order by score desc) as rank from student;

3 dense_rank()和rank over()很像,但學生成績並列后並不會空出並列所占的名次,如下1 2 2 3 4

select name,course,dense_rank() over(partition by course order by score desc) as rank from student;

4 row_number這個函數不需要考慮是否並列,那怕根據條件查詢出來的數值相同也會進行連續排名
select name,course,row_number() over(partition by course order by score desc) as rank from student;

tips:
1、partition by用於給結果集進行分區。
2、partition by和group by有何區別?
3、partition by只是將原始數據進行名次排列(記錄數不變)
4、group by是對原始數據進行聚合統計(記錄數可能變少, 每組返回一條)
5、使用rank over()的時候,空值是最大的,如果排序字段為null, 可能造成null字段排在最前面,影響排序結果。


免責聲明!

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



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