with a as
(select er.exam_id,max(score) as da, min(score) as xiao
from examination_info ei
join exam_record er on ei.exam_id = er.exam_id
where difficulty = 'hard'
and score is not null
group by  er.exam_id
)

select uid,exam_id,cast(avg(new_score) as signed) as avg_new_score
from(
select uid, er.exam_id,
if(da!=xiao,(score-xiao)/(da-xiao)*100,score) as new_score

from examination_info ei
join exam_record er on ei.exam_id = er.exam_id
join a on a.exam_id=er.exam_id
where score is not null
)b
group by uid,exam_id
order by exam_id,avg_new_score desc

注意易错点if(da!=xiao,(score-xiao)/(da-xiao)*100,score) as new_score