题解 | 浙大不同难度题目的正确率
浙大不同难度题目的正确率
https://www.nowcoder.com/practice/d8a4f7b1ded04948b5435a45f03ead8c
思路分析:
计算不同难度正确率,定位浙大同学,找到他的device_id,根据他的device_id找到他的答题情况,根据question_id找到每道题的难度,根据难度进行分组,然后组内统计答题正确的题目数除以组内总题数即可,因此三表连接分组聚合即可。表之间分别通过device_id、question_id进行连接。
代码解释:
SELECT qd.difficult_level, ROUND(COUNT(CASE WHEN qpd.result = 'right' THEN 1 END) / COUNT(*), 4) AS correct_rate FROM ( SELECT * FROM user_profile WHERE university = '浙江大学' ) AS usr JOIN question_practice_detail AS qpd ON usr.device_id = qpd.device_id JOIN question_detail AS qd ON qd.question_id = qpd.question_id GROUP BY qd.difficult_level ORDER BY correct_rate;
我习惯于用子查询先筛选再连接,当然也可以先连接,再在WHERE子句中筛选出浙大同学,连接完成后对连接后的表用GROUP BY根据难度分组,统计正确答题题数用条件计数,用COUNT或者SUM都行,统计总题数用COUNT计数,两者相除得到结果。最后根据正确率升序排列。