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 子句对结果进行排序,按正确率排序。