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排序得到排名,取出前三名作为最终结果