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