根据题目要求,统计SQL高难度试卷得分平均值大于80的用户在2021年试卷总完成次数和题目总练习次数,主要是筛选满足条件的用户,所以第一想法是根据用户分组,多层嵌套查询,但由于表多且数据冗杂,发现将条件拆分先筛选表格的方式更加可行。
SELECT uid,
       exam_cnt,
       IF(question_cnt IS null, 0, question_cnt)
FROM (
  # 统计2021年试卷总完成次数
  SELECT uid, COUNT(submit_time) AS exam_cnt
  FROM exam_record
  WHERE submit_time IS NOT NULL
        AND YEAR(submit_time) = '2021'
  GROUP BY uid
) t1
LEFT JOIN (
  # 统计2021年题目总练习次数
  SELECT uid, COUNT(submit_time) AS question_cnt
  FROM practice_record
  WHERE submit_time IS NOT NULL
        AND YEAR(submit_time) = '2021'
  GROUP BY uid
) t2 USING(uid)
# 筛选“高难度SQL试卷得分平均值大于80并且是7级的红名大佬”
WHERE uid IN (
  SELECT uid
  FROM exam_record JOIN user_info
       USING(uid)
  WHERE level = 7 AND exam_id IN (
    SELECT exam_id
    FROM examination_info
    WHERE tag = 'SQL' AND difficulty = 'hard'
  ) 
  GROUP BY uid
  HAVING avg(score) > 80
)
ORDER BY exam_cnt ASC, question_cnt DESC