使用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