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

SELECT z.tag, z.uid, z.ranking
FROM(
    SELECT ei.tag, er.uid, ROW_NUMBER() OVER(PARTITION BY ei.tag ORDER BY 
    MAX(er.score) DESC, MIN(er.score) DESC, er.uid DESC) AS ranking
    FROM exam_record AS er
    LEFT OUTER JOIN examination_info AS ei
    ON er.exam_id = ei.exam_id
    GROUP BY ei.tag, er.uid) AS z # 涉及到聚合函数,故需按字段进行分组
WHERE z.ranking <= 3; # 窗口函数的排名结果不能直接在where中使用,需使用嵌套查询的方式作为新表传入主查询

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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