select
    uid,
    er.exam_id as exam_id,
    if(maxi=mini,round(avg(score)),round(avg(score-mini)/(maxi-mini)*100)) as avg_new_score
from (
	select
		exam_id,
		max(score) as maxi,
		min(score) as mini
	from exam_record
	where exam_id in (select exam_id from examination_info where difficulty='hard') and score is not null
	group by exam_id
)m ,exam_record er
where m.exam_id=er.exam_id and score is not null
group by uid,exam_id
order by exam_id,avg_new_score desc