SELECT difficult_level, -- count(if(result = 'right',result,null)) as right_cnt, 统计正确的数量 -- COUNT(IF(result = 'wrong',result,NULL)) AS wrong_cnt, 统计错误的数量 FORMAT ( COUNT(IF (result = 'right', result, NULL)) / ( COUNT(IF (result = 'right', result, NULL)) + COUNT(IF (result = 'wrong', result, NULL)) ), 4 ) AS correct_rate FROM user_profile, question_practice_detail, question_detail WHERE user_profile.device_id = question_practice_detail.device_id AND question_practice_detail.question_id = question_detail.question_id AND university = '浙江大学' GROUP BY difficult_level ORDER BY correct_rate
题解思路:
1.首先将3个表连接,3张表两个条件,同时过滤出浙江大学记录;(外连接/普通连接都行,因为没做题的学生不影响正确率,这里直接使用普通连接)
2.只显示有用的两列,这时可以清楚的看到各难度题目的result情况
3.根据上面结果,按题目难度(group by '难度'),分别统计出各难度的正确和错误的次数
4.现在可以计算出正确率:正确数 / (正确数+错误数)
5.最后不要忘记使用order by 子句对结果进行排序,按正确率排序。