select
    exam_record.uid,
    count(DISTINCT exam_record.exam_id) as exam_cnt,
    #使用distinct多列去重
# 错误:count(DISTINCT practice_record.question_id) as question_cnt
#     count(distinct if(year(practice_record.submit_time)=2021, practice_record.question_id,NULL)) as question_cnt
    count(DISTINCT practice_record.question_id, if(year(practice_record.submit_time)=2021,practice_record.submit_time,NULL)) as question_cnt
from exam_record
left join practice_record
on exam_record.uid = practice_record.uid
and year(exam_record.submit_time) = 2021
where exam_record.uid in (
    # 筛选满足条件的用户;注意join方式的选择。
    select b.uid
    from examination_info a
    left join exam_record b on a.exam_id=b.exam_id
    inner join user_info c on b.uid=c.uid and c.level=7
    where a.tag='SQL' and a.difficulty='hard'
    group by b.uid
    having avg(b.score) > 80
             )
and exam_record.submit_time IS NOT NULL
group by exam_record.uid
order by exam_cnt, question_cnt DESC;

# # 筛选满足条件的用户;注意join方式的选择,以下使用方法是错误的。
#     select er.uid
#     from exam_record as er
#     left join user_info as ui
#     on er.uid = ui.uid
#     and ui.level = 7
#     left join examination_info as ei
#     on ei.exam_id = er.exam_id
#     and ei.difficulty = 'hard'
#     and ei.tag = 'SQL'
#     group by er.uid
#     having avg(er.score) > 80