解析:

  1. 题目考点为三个表的联结,由于表2(question_practice_detail)同时连接两个表,因此这里使用其为主表,使用left join联结另外两个表,键分别是device_id和question_id,获取到有答题记录的学生名单以及题目的难度;
  2. 看到大部分人使用的是SUM(IF)函数,这里我选用**avg(case when)**即可直接算出正确率,无需再额外除以count(1)总题目数,会更简洁一些;
  3. 最后记得用where筛选出浙江大学的学生,且根据题目难度来分组汇总,最后对正确率进行升序。
select t3.difficult_level,
avg(case when t1.result='right' then 1 else 0 end) as correct_rate
from question_practice_detail t1 
left join user_profile t2 on t1.device_id = t2.device_id
left join question_detail t3 on t1.question_id = t3.question_id
where t2.university='浙江大学'
group by t3.difficult_level
order by correct_rate