SELECT uid,exam_id, ROUND(AVG(new_score)) avg_new_score FROM( SELECT uid, exam_id, COALESCE(100*(score-(MIN(score) OVER w))/(MAX(score) OVER w-MIN(score) OVER w),score) new_score FROM exam_record INNER JOIN examination_info USING(exam_id) WHERE difficulty = 'hard' AND submit_time IS NOT NULL WINDOW w AS (PARTITION BY exam_id) )t GROUP BY uid,exam_id ORDER BY exam_id, avg_new_score DESC