SELECT
t1.uid,
t1.exam_cnt AS exam_cnt,
IFNULL(t2.question_cnt, 0) AS question_cnt
FROM (
SELECT
uid,
COUNT(submit_time) AS exam_cnt
FROM exam_record
WHERE YEAR(submit_time) = 2021
GROUP BY uid
) t1
LEFT JOIN(
SELECT
uid,
COUNT(submit_time) AS question_cnt
FROM practice_record
WHERE YEAR(submit_time) = 2021
GROUP BY uid
) t2
ON t1.uid = t2.uid
WHERE t1.uid IN(
SELECT ui.uid
FROM user_info ui
JOIN exam_record er ON ui.uid = er.uid
JOIN examination_info ei ON er.exam_id = ei.exam_id
WHERE tag = 'SQL' and difficulty = 'hard' and level = 7
GROUP BY ui.uid
HAVING AVG(score) > 80
)
ORDER BY exam_cnt, question_cnt DESC
实在是非常麻烦,很多细节......,尽量把筛选的条件凑到一块,使用WHERE IN子句吧。

京公网安备 11010502036488号