题解 | #每个6/7级用户活跃情况#
每个6/7级用户活跃情况
https://www.nowcoder.com/practice/a32c7c8590324c96950417c57fa6ecd1
# 请统计每个6/7级用户总活跃月份数、2021年活跃天数、2021年试卷作答活跃天数、2021年答题活跃天数,按照总活跃月份数、2021年活跃天数降序排序。
with t as(
select ui.uid as uid, level,
start_time as act_time,
date_format(start_time, '%Y%m') as act_month,
date_format(start_time, '%Y%m%d') as act_days,
'exam' as tags
from user_info ui left join exam_record er on ui.uid=er.uid
union all
select ui.uid as uid, level,
submit_time as act_time,
date_format(submit_time, '%Y%m') as act_month,
date_format(submit_time, '%Y%m%d') as act_days,
'question' as tags
from user_info ui left join practice_record pr on ui.uid=pr.uid
)
select uid,
count(distinct act_month) as act_month_total,
count(distinct case when year(act_time)=2021 then act_days end) as act_days_2021,
count(distinct case when year(act_time)=2021 and tags='exam' then act_days end) as act_days_2021_exam,
count(distinct case when year(act_time)=2021 and tags='question' then act_days end) as act_days_2021_question
from t
where level in (7,6)
group by uid
order by act_month_total desc, act_days_2021 desc;
思路:要将两个表结合起来并贴上标签,利用case when来筛选。
一个小坑:date_format格式后的字段act_month和act_days不能用year来过滤,需要新增字段act_time来过滤。
