注意把NULL值转换成0 with temp as ( select t1.uid from exam_record t1 left join examination_info t2 on t1.exam_id = t2.exam_id left join user_info t3 on t1.uid = t3.uid where tag = "SQL" and difficulty = "hard" and level = 7 group by t1.uid having avg(score) > 80 ) select a.uid uid,ifnull(a.exam_cnt,0) exam_cnt, ifnull(b.question_cnt,0) question_cnt from ( select uid, count(submit_time) exam_cnt from exam_record where uid in (select * from temp) and year(submit_time) = 2021 group by uid )a left join (select uid,count(submit_time) question_cnt from practice_record where uid in (select * from temp) and year(submit_time) = 2021 group by uid )b on a.uid = b.uid order by exam_cnt asc,question_cnt desc