题解 | 浙大不同难度题目的正确率
浙大不同难度题目的正确率
https://www.nowcoder.com/practice/d8a4f7b1ded04948b5435a45f03ead8c
SELECT
qd.difficult_level,
ROUND(
SUM(
CASE
WHEN qpd.result = 'right' THEN 1
ELSE 0
END
) / COUNT(*),
4
) AS correct_rate
FROM
question_practice_detail AS qpd
JOIN user_profile AS up ON up.device_id = qpd.device_id
JOIN question_detail AS qd ON qd.question_id = qpd.question_id
WHERE
university = '浙江大学'
GROUP BY
difficult_level
ORDER BY
correct_rate;
解题思路
1)框架搭建
先看结果,需要difficult_level,那就导入difficult_level,需要correct_rate,那就导入correct_rate,有三个表,以qpd为中间关联对象,up和qpd的关联变量为d_i,qpd和qd的关联变量为q_i,所以写三表连接。
2)细化条件
由题目已知,只要浙大的答题情况,所以用WHERE 条件筛选出浙大条件。
要基于题目难度求出正确率,那就按照题目难度进行分组,GROUP BY 题目难度。
还要按照正确率进行低到高排序,所以ORDER BY正确率。
3)求出结果
正确率=正确结果/所有提交次数
利用SUM(CASE WHEN 结果 = ‘right’THEN 1 ELSE 0 END)求出正确结果的数量,再利用COUNT(*),统计所有提交次数。
不要忘记用ROUND(上一句的结果,4)保留4位小数。
