题解 | #浙大不同难度题目的正确率#
浙大不同难度题目的正确率
https://www.nowcoder.com/practice/d8a4f7b1ded04948b5435a45f03ead8c
解题思路:
1.确立这三个表哪个表为主表,因为是统计浙江大学用户的不同难度答题正确率,所以user_profile可当做主表,但是user_profile的字段与最终结果无关,question_practice_detail好像也不可单独做主表,所以我这边把以question_practice_detail内连接user_profile的查询结果为question_id与result的子查询作为主表,先筛选出来所有浙江大学的question_id与result。
2.然后再用这个子查询和question_detail表左连接做最终结果的查询,重点是如何表示答题的正确率情况,正确率可以通过子查询的答题正确数除答题总数,正确数通过sum嵌套if函数得出,if函数先判断他是否正确正确则记为1,统计1的个数,然后统计子查询的答题总量,从而得出正确率。
3.最后根据difficult_level分组再根据correct_rate排序。
select
Q3.difficult_level,sum(if(Q2.result = 'right', 1, 0)) / count(Q2.question_id) as correct_rate
from
(
select
Q1.question_id,
Q1.result
from
question_practice_detail as Q1
inner join user_profile as U on Q1.device_id = U.device_id
where
U.university = '浙江大学'
) as Q2
left outer join question_detail as Q3 on Q2.question_id = Q3.question_id
group by
Q3.difficult_level
order by
correct_rate;