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')