select tag as tid,uid,ranking from ( select tag,exam_record.uid, row_number() over(partition by tag order by max(score) desc,min(score) desc,exam_record.uid desc) as ranking from exam_record left join examination_info using(exam_id) group by tag,exam_record.uid) a where ranking <= 3
row_number窗口函数的应用,按照标签分组,按照最高分数、最低分数、uid排序得到排名,取出前三名作为最终结果