题解 | #浙大不同难度题目的正确率#
浙大不同难度题目的正确率
https://www.nowcoder.com/practice/d8a4f7b1ded04948b5435a45f03ead8c
A SELECT c.difficult_level, ROUND(sum(case when b.result = 'right' then 1 else 0 end)/count(b.question_id),4) AS correct_rate FROM question_practice_detail as b LEFT JOIN user_profile AS a ON a.device_id = b.device_id LEFT JOIN question_detail AS c ON b.question_id = c.question_id where a.university = '浙江大学' GROUP BY difficult_level ORDER BY correct_rate B SELECT c.difficult_level, ROUND(sum(case when b.result = 'right' then 1 else 0 end)/count(b.question_id),4) AS correct_rate FROM user_profile as a LEFT JOIN question_practice_detail AS b ON a.device_id = b.device_id LEFT JOIN question_detail AS c ON b.question_id = c.question_id where a.university = '浙江大学' GROUP BY difficult_level ORDER BY correct_rate A和B的区别: 这两个 SQL 查询的区别在于它们的表连接顺序不同。 第一个查询首先连接了 question_practice_detail 表和 user_profile 表,然后再连接 question_detail 表。由于这个连接顺序,最终结果中可能会包含一些 question_practice_detail 表中没有对应 question_detail 表记录的难度等级,因为在这个连接顺序下,question_practice_detail 表中的所有记录都会参与计算,而 question_detail 表中没有对应记录的难度等级将被排除在外。 第二个查询则先连接了 user_profile 表和 question_practice_detail 表,然后再连接 question_detail 表。由于这个连接顺序,最终结果中不会包含 question_practice_detail 表中没有对应 question_detail 表记录的难度等级,因为在这个连接顺序下,只有 question_practice_detail 表中存在对应 question_detail 表的记录才会被计算。 总的来说,这两个查询的结果可能略有不同,因为它们的表连接顺序不同。具体选择哪个查询取决于具体的需求和场景。如果需要计算所有难度等级的正确率,无论是否有对应的题目详细信息,那么第一个查询可能更为合适;如果只需要计算有题目详细信息的难度等级的正确率,那么第二个查询可能更为合适。