思路:

1.取高难度试卷,最高分最低分 两表关联difficulty ='hard',max(score) over(partiton by exam_id)

2.归一化得分,乘100(只有一条记录则为得分)if(max=min,score,(score-min)/(max-min))

3.归一化分数平均值 round(avg,0)

4.试卷id升序,归一化分数降序 exam_id asc avg_new_score desc

解题步骤:

1.取高难度试卷,最高分最低分 两表关联difficulty ='hard',max(score) over(partiton by exam_id)

select a.uid,a.exam_id,a.score,
min(score) over(partition by a.exam_id) mini,
max(score) over(partition by a.exam_id) maxi
from exam_record a
left join examination_info b
on a.exam_id=b.exam_id
where b.difficulty ='hard'
and a.score is not null

2.归一化得分,乘100(只有一条记录则为得分)if(max=min,score,(score-min)/(max-min))

select uid,exam_id,score,
if(maxi=mini,score,(score-mini)/(maxi-mini)*100) as avg_new_score 
from (
select a.uid,a.exam_id,a.score,
min(score) over(partition by a.exam_id) mini,
max(score) over(partition by a.exam_id) maxi
from exam_record a
left join examination_info b
on a.exam_id=b.exam_id
where b.difficulty ='hard'
and a.score is not null)t1

3.归一化分数平均值 round(avg,0)

4.试卷id升序,归一化分数降序 exam_id asc avg_new_score desc

select uid,exam_id,round(avg(avg_new_score),0)avg_new_score
from (
select uid,exam_id,score,
if(maxi=mini,score,(score-mini)/(maxi-mini)*100) as avg_new_score 
from (
select a.uid,a.exam_id,a.score,
min(score) over(partition by a.exam_id) mini,
max(score) over(partition by a.exam_id) maxi
from exam_record a
left join examination_info b
on a.exam_id=b.exam_id
where b.difficulty ='hard'
and a.score is not null)t1
)t2
group by uid,exam_id
order by exam_id asc,avg_new_score desc