select a.uid, count(distinct a.id) exam_cnt, count(distinct b.id) question_cnt -- select * from exam_record a left join practice_record b on a.uid=b.uid where a.uid in ( select a.uid from exam_record a, user_info b, examination_info c where a.uid=b.uid and a.exam_id=c.exam_id and c.tag='SQL' and c.difficulty='hard' and b.level='7' group by a.uid having avg(a.score)>80 ) and (case when b.submit_time is not null then date_format(b.submit_time,'%Y')='2021' end or b.submit_time is null) and date_format(a.submit_time,'%Y')='2021' group by uid order by exam_cnt asc,question_cnt desc