题解 | 每类试卷得分前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中使用,需使用嵌套查询的方式作为新表传入主查询

查看4道真题和解析