select 
#2、对经过条件筛选后的数据表,挑选出展示字段#
t1.uid,
#2.1、总活跃月份数 = 用户exam做题月份数 + 用户practice做题月份数 —— 用户exam和practice做题月份相同的月份数(注意:用户总活跃月份数,既包括该用户exam做题月份,也包括该用户practice做题月份)#
count(distinct date_format(t2.start_time,'%Y%m')) + count(distinct date_format(t3.submit_time,'%Y%m')) - count(distinct case when date_format(t2.start_time,'%Y%m') = date_format(t3.submit_time,'%Y%m') then date_format(t2.start_time,'%Y%m') else null end) as act_month_total,
#2.2、2021年总活跃天数 = 2021年用户exam做题天数 + 2021年用户practice做题天数 —— 2021年用户exam和practice做题月份相同的天数(注意:用户2021年总活跃天数,既包括该用户2021年exam做题天数,也包括该用户2021年practice做题天数,还要注意需要进行2021年的条件筛选)#
count(distinct case when extract(year from t2.start_time) = '2021' then date_format(t2.start_time,'%Y%m%d') else null end) + count(distinct case when extract(year from t3.submit_time) = '2021' then date_format(t3.submit_time,'%Y%m%d') else null end) - count(distinct case when date_format(t2.start_time,'%Y%m%d') = date_format(t3.submit_time,'%Y%m%d') then t2.start_time else null end) as act_days_2021,
#2.3、仅对用户在2021年的exam做题天数进行汇总(注意:要对日期进行2021年的筛选)#
count(distinct case when extract(year from t2.start_time) = '2021' then date_format(t2.start_time,'%Y%m%d') else null end) as act_days_2021_exam,
#2.4、仅对用户在2021年的practice做题天数进行汇总(注意:要对日期进行2021年的筛选)#
count(distinct case when extract(year from t3.submit_time) = '2021' then date_format(t3.submit_time,'%Y%m%d') else null end) as act_days_2021_question

#1、确定需求来源的数据表&对关联后数据表所需进行的条件筛选#
from user_info as t1
left join exam_record as t2
on t1.uid = t2.uid
left join practice_record as t3
on t1.uid = t3.uid
where t1.level in (6,7)

#3、按照uid进行分组统计&对统计后的结果按照act_month_total和act_days_2021倒序排序(即由大到小)#
group by 1
order by 2 desc,3 desc;