-- 按uid, exam_id分组,计算平均值
SELECT uid, exam_id,
    ROUND(AVG(min_max_score), 0) AS avg_new_score
FROM (
    -- 在每类试卷作答记录内执行min-max归一化
    SELECT uid, exam_id, score,
        IF(min_score = max_score, score, 
           (score - min_score) * 100 / (max_score - min_score)) AS min_max_score
    FROM (
        -- 关联两张表,取difficulty='hard'的数据,找出每类试卷的最小值和最大值
        SELECT uid, exam_id, score,
            MAX(score)OVER(PARTITION BY exam_id) AS max_score, 
            MIN(score)OVER(PARTITION BY exam_id) AS min_score 
        FROM exam_record 
            LEFT JOIN 
            examination_info
            USING(exam_id)
        WHERE difficulty = 'hard'
            AND score IS NOT NULL
    ) sel_table
) min_max_table
GROUP BY uid, exam_id
ORDER BY exam_id, avg_new_score DESC