SELECT uid ,exam_id ,ROUND(AVG(new_score)) AS avg_new_score FROM ( SELECT uid ,exam_id ,IF(max_score = min_score, score, (score-min_score)/(max_score-min_score)*100) as new_score FROM( SELECT uid ,exam_id ,score ,MAX(score) OVER(PARTITION BY exam_id) AS max_score ,MIN(score) OVER(PARTITION BY exam_id) AS min_score FROM examination_info JOIN exam_record USING(exam_id) WHERE score IS NOT NULL AND difficulty = "hard" ) data1 ) data2 GROUP BY exam_id,uid ORDER BY exam_id, avg_new_score DESC