根据题目要求,统计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