```WITH t AS (
	SELECT
		a.uid,
		a.score,
		b.exam_id,
	IF
		(
			( a.score - MIN( score ) over ( PARTITION BY exam_id ) ) / ( MAX( score ) over ( PARTITION BY exam_id ) - MIN( score ) over ( PARTITION BY exam_id ) ) IS NOT NULL,
			( a.score - MIN( score ) over ( PARTITION BY exam_id ) ) * 100 / ( MAX( score ) over ( PARTITION BY exam_id ) - MIN( score ) over ( PARTITION BY exam_id ) ),
			a.score 
		) minmaxscore 
	FROM
		exam_record a
		LEFT JOIN examination_info b ON a.exam_id = b.exam_id 
	WHERE
		difficulty = "hard" 
		AND score IS NOT NULL 
	) SELECT
	uid,
	exam_id,
	ROUND( avg( minmaxscore ), 0 ) avg_new_score 
FROM
	t 
GROUP BY
	exam_id,
	uid 
ORDER BY
	exam_id ASC,
	avg_new_score DESC;