```WITH t AS (
SELECT
a.device_id,
b.question_id,
b.result,
b.date
FROM
user_profile a
LEFT JOIN question_practice_detail b ON a.device_id = b.device_id
WHERE
university = "浙江大学"
) SELECT
difficult_level,
sum( IF ( result = "right", 1, 0 ) ) / count( result ) correct_rate
FROM
t
LEFT JOIN question_detail c ON t.question_id = c.question_id
WHERE
result IS NOT NULL
GROUP BY
difficult_level
ORDER BY
correct_rate ASC
解题思路:
找浙江大学用户在不同难度下的答题正确率,并升序排序。
这要求我们需要对用户表和答题表按照设备号进行左连接,并对结果用浙江大学这个条件过滤,得到浙江大学用户答题信息的临时表,(包括未答题用户)。连接答题难易表,并对结果中未答题的用户进行过滤,用难度对原表拆分成不同小表,对每个小表中的答题正确数用sum(if(,,))统计并除以答题总数count(result)即为答题正确率。最后以正确率order by 升序 asc 排序。