这种联合多张表的写成多表查询比写成子查询的方式更清楚一些。

select 
difficult_level,
sum(if(result='right', 1, 0)) / count(qd.question_id) as correct_rate
from user_profile as up

inner join question_practice_detail as qpd
    on up.device_id = qpd.device_id
    
inner join question_detail as qd
    on qd.question_id = qpd.question_id

where up.university = '浙江大学'
group by difficult_level
order by correct_rate asc;