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;
- 选择列: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(正确率)。
- 表连接: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列进行连接。
- 筛选条件:
where u.university='浙江大学'
:只筛选出user_profile
表中university
(大学)列为浙江大学
的数据。 - 分组:
group by qd.difficult_level
:按照question_detail
表中的difficult_level
(题目难度等级)进行分组。 - 排序:
order by correct_rate ASC
:按照计算出的correct_rate
(正确率)以升序排列结果。