思路:
①根据筛选条件把2021年、SQL困难题目、平均分>80、的7级用户找出来先,形成tb1;
②根据找出来的用户,分别去算出2021年他们的完成试卷数目、完成练习数据,分别形成tb5和tb6;
③因为只保留有试卷完成的用户,所以将tb5左连接tb6即可。

with tb1 as
(select uid 
from user_info 
left join exam_record tb2 using(uid)
left join examination_info tb3 using(exam_id)
where year(tb2.submit_time)=2021 and level=7 and tag='SQL' and difficulty='hard'
group by uid having avg(tb2.score)>80)

select uid, a, if(b is null, 0, b) from
(select tb2.uid, count(tb2.score) a
from tb1
left join exam_record tb2 using(uid)
where year(tb2.submit_time)=2021
group by tb2.uid) tb5

left join

(select tb4.uid, count(tb4.score) b
from tb1
left join practice_record tb4 using(uid)
where year(tb4.submit_time)=2021
group by tb4.uid) tb6
using(uid)
order by a, b desc