使用row_number() over函數分組排序


1.  問題:如下score表有學生id、班級id、學生成績三個字段,查詢每個班級成績前三名的學生。

 

2.  思路:使用row_number() over函數分組排序取topN

select * from  (select *,row_number() over(partition by c_id order by s_score desc) as 'rank' from score) t1 where t1.rank<4;

 

3.  知識點:row_number() over(partition by  c1 order by  c2 (desc)) 及 row_number()、rank()、dense_rank()的區別

row_number()、rank()、dense_rank()三種函數均可以根據某字段對記錄進行排序得到排列序號,排序區別如下:

row_number() 排名時不考慮並列情況

rank()考慮並列情況,但排名不連續(如1,2,3,3,5)

dense_rank()考慮並列情況,但排名連續(如1,2,3,3,4)

 


免責聲明!

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



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