题解 | #每类试卷得分前3名#
每类试卷得分前3名
https://www.nowcoder.com/practice/255aa1863fe14aa88694c09ebbc1dbca
select tag,uid,ranking from( select tag,uid,rank()over(partition by tag order by maxscore desc,minscore desc,uid desc)as ranking from (select uid,tag,max(score) maxscore,min(score) minscore from exam_record ed left join examination_info eo on ed.exam_id=eo.exam_id group by tag,uid ) t1 ) t2 where ranking <=3
三次查询
最里层子查询:两表连接,计算每类试卷每个学生的最高成绩和最低成绩,这里用left join 是因为null值存在,计算最高最低成绩是为了题目要求排序
第二层查询;使用窗口函数按照最高分,最低分,uid排名 并取别名ranking
最外面查询ranking大于等于3的