SQL17 平均活跃天数和月活人数
题目主要信息:
- 计算2021年每个月里试卷作答区用户平均月活跃天数avg_active_days和月度活跃人数mau
- 结果保留两位小数
问题拆分:
- 根据提交时间submit_time不为空筛选活跃的的人。知识点:select...from...where...
- 筛选每个月的平均活跃天数和总活跃人数:
- 根据月份来选择时间。知识点:date_format() 通过这个函数匹配'%Y%m'年份和月份;
- 计算用户平均活跃天数:
- 根据不同的日期且不同的用户ID统计每个月用户的总活跃天数。知识点:distinct、count()、date_format()
- 统计每个月用的总人数。知识点:distinct、count()
- 总天数/总人数得到每个月的用户平均活跃天数;
- 计算每月总活跃人数,直接统计每月不同的用户id数。知识点:count()、distinct
- 按照月份分组
group by date_format(submit_time, '%Y%m')
知识点:group by ...
- 保留两位小数。 知识点:round(x,2)
代码:
select date_format(submit_time, '%Y%m') as month,
round((count(distinct uid, date_format(submit_time, '%y%m%d'))) / count(distinct uid), 2) as avg_active_days,
count(distinct uid) as mau
from exam_record
where submit_time is not null
and year(submit_time) = 2021
group by date_format(submit_time, '%Y%m')