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 examination_info 
         JOIN
         exam_record
         USING(exam_id)
    GROUP BY tag, uid
) rankable
WHERE ranking <= 3