题解 | #每个6/7级用户活跃情况#--多个子查询表连接
每个6/7级用户活跃情况
https://www.nowcoder.com/practice/a32c7c8590324c96950417c57fa6ecd1
# 合并试卷作答记录表和题目练习表,并用类型标签标注所属类型 with k1 as( select uid, exam_id, start_time, date_format(start_time, '%Y%m') start_month, date_format(start_time, '%Y%m%d') start_date, 'exam' s_tag from exam_record union all select uid, question_id, submit_time, date_format(submit_time, '%Y%m') start_month, date_format(submit_time, '%Y%m%d') start_date, 'question' s_tag from practice_record ) # 以下用到各个子查询分别用来查询每个6/7级用户的总活跃月份数、2021年活跃天数、2021年试卷作答活跃天数、2021年答题活跃天数 select ui.uid, if(act_month_total is null, 0, act_month_total) act_month_total, if(act_days_2021 is null, 0, act_days_2021) act_days_2021, if(act_days_2021_exam is null, 0, act_days_2021_exam) act_days_2021_exam, if(act_days_2021_question is null, 0, act_days_2021_question) act_days_2021_question from (select uid from user_info where level in (6,7)) ui left join ( select ui.uid, count(distinct start_month) act_month_total from k1 join user_info ui on k1.uid=ui.uid where level in (6,7) group by uid ) t1 on ui.uid = t1.uid left join ( select ui.uid, count(distinct start_date) act_days_2021 from k1 join user_info ui on k1.uid=ui.uid where level in (6,7) and year(start_time) = '2021' group by uid ) t2 on ui.uid = t2.uid left join ( select ui.uid, count(distinct start_date) act_days_2021_exam from k1 join user_info ui on k1.uid=ui.uid where level in (6,7) and year(start_time) = '2021' and s_tag = 'exam' group by uid ) t3 on ui.uid = t3.uid left join ( select ui.uid, count(distinct start_date) act_days_2021_question from k1 join user_info ui on k1.uid=ui.uid where level in (6,7) and year(start_time) = '2021' and s_tag = 'question' group by uid ) t4 on ui.uid = t4.uid order by act_month_total desc, act_days_2021 desc;