Eng1ne_ty

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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)

 

posted on 2020-11-16 22:51  Eng1ne_ty  阅读(806)  评论(0编辑  收藏  举报