牛客网刷题SQL27 每类试卷得分前3名

SQL27 每类试卷得分前3名

题目

现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间):
在这里插入图片描述
试卷作答记录表exam_record(uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交卷时间, score得分):
在这里插入图片描述
找到每类试卷得分的前3名,如果两人最大分数相同,选择最小分数大者,如果还相同,选择uid大者。

select *
from
(select 
    tag
    ,uid
    ,row_number() over(partition by tag order by tag,max(a.score) desc,min(a.score) desc,uid desc) c
from exam_record a
left join examination_info b
on a.exam_id = b.exam_id
group by b.tag,a.uid)q
where c<=3;

需要注意的是在row_number() over()中可以用聚合函数,但不知道为什么前面的tag没有加上表也没有报错。


版权声明:本文为weixin_48744808原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。