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