题目
SQL134 满足条件的用户的试卷完成数和题目练习数
思路
- 根据条件先筛出符合条件的uid;
- 两个表分别groupby统计,leftjoin连起来,合成最后的结果集;
solution
leftjoin if is null groupby orderby
with valid_ids as (
select user.uid uid
from exam_record record
join user_info user
on (record.uid = user.uid)
where record.exam_id=9001 and user.level=7
group by uid
having avg(score)>=80
)
select
uid,
exam_cnt,
if(question_cnt is null ,0 ,question_cnt)
from (
(select
uid,
count(id) exam_cnt
from exam_record
where year(submit_time)=2021
group by uid ) t_exam
left join
(select
uid,
count(id) question_cnt
from practice_record
where year(submit_time)=2021
group by uid ) t_practice
using (uid)
)
where uid in (
select uid from valid_ids
)
order by exam_cnt asc, question_cnt desc;