题解 | #每类试卷得分前3名#

每类试卷得分前3名

https://www.nowcoder.com/practice/255aa1863fe14aa88694c09ebbc1dbca

SELECT tid, uid, ranking
FROM(
    SELECT tag AS tid, uid, ROW_NUMBER() OVER (PARTITION BY tag ORDER BY max_score DESC, min_score DESC, uid DESC) AS ranking
    FROM (SELECt uid, tag, MIN(score) AS min_score, MAX(score) AS max_score
    FROM exam_record AS er LEFT JOIN examination_info AS ei ON er.exam_id = ei.exam_id
    GROUP BY uid, tag) AS t1
) AS t2
WHERE ranking <= 3;

最内层表1: 根据uid, tag对左连接后的表进行聚合,分别得到每个(uid,tag)的最小成绩(min_score)和最大成绩(max_score)列

次内层表2: 对tag分组进行排序,以最大成绩(max_score)降序,最小成绩(min_score)降序,uid 降序进行排序

最外层表3: 在选取tid(tag), uid, ranking的前三名

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 18:34
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务