select
    qd.difficult_level,
    round(sum(case when qpd.result='right' then 1 else 0 end)/count(qpd.question_id),4) as correct_rate
from
    user_profile u
join
    question_practice_detail qpd
on
    u.device_id=qpd.device_id
join
    question_detail qd 
on
    qpd.question_id=qd.question_id
where 
    u.university='浙江大学'
group by
    qd.difficult_level
order by
    correct_rate ASC;
  1. 选择列:qd.difficult_level:选择question_detail表中的difficult_level(题目难度等级)列。round(sum(case when qpd.result='right' then 1 else 0 end)/count(qpd.question_id),4) as correct_rate:这部分计算并取四舍五入后的结果。首先,通过case when语句判断question_practice_detail表中的result列,如果值为right(正确),则返回 1,否则返回 0。然后使用sum函数对这些值求和,再除以question_practice_detail表中question_id的数量,得到正确率。最后使用round函数将结果保留四位小数,并将这个结果命名为correct_rate(正确率)。
  2. 表连接:from user_profile u join question_practice_detail qpd on u.device_id=qpd.device_id:将user_profile表(命名为u)和question_practice_detail表(命名为qpd)通过device_id列进行连接。join question_detail qd on qpd.question_id=qd.question_id:再将上述连接结果与question_detail表(命名为qd)通过question_id列进行连接。
  3. 筛选条件where u.university='浙江大学':只筛选出user_profile表中university(大学)列为浙江大学的数据。
  4. 分组group by qd.difficult_level:按照question_detail表中的difficult_level(题目难度等级)进行分组。
  5. 排序order by correct_rate ASC:按照计算出的correct_rate(正确率)以升序排列结果。