# 两次连表
SELECT
uid,
exam_cnt,
IFNULL(question_cnt,0) question_cnt
FROM(
# 统计不同用户的试卷完成数,2021年没有记录的直接筛掉
SELECT
uid,COUNT(DISTINCT exam_id) exam_cnt
FROM
exam_record
WHERE
YEAR(start_time) = 2021
GROUP BY
uid
) t1
# 左连接
LEFT JOIN(
# 统计不同用户的题目总练习次数,注意不用DISTINCT去重
SELECT
uid,COUNT(question_id) question_cnt
FROM
practice_record
WHERE
YEAR(submit_time) = 2021
GROUP BY
uid
) t2 USING(uid)
# 内连接,起到筛选作用
INNER JOIN(
# 找到符合条件的用户id
SELECT
uid, AVG(score) avg_score
FROM
user_info
INNER JOIN
exam_record USING(uid)
INNER JOIN
examination_info USING(exam_id)
WHERE
tag='SQL' AND difficulty='hard' AND level=7
GROUP BY
uid
HAVING
avg_score > 80
) t3 USING(uid)
ORDER BY
exam_cnt,question_cnt DESC