【场景】:平均活跃天数和月活人数
【分类】:分组查询、count(distinct 2个字段)
分析思路
难点:
1.如何计算活跃天数?对日期、用户去重
如何计算平均活跃天数
可能存在的情况:
一、2个不同用户在同一天有记录,活跃天数为2,活跃人数为2。
二、2个不同用户在不同天各有一条记录,活跃天数为2,活跃人数为2。
三、1个用户在同一天有2条记录,活跃天数为1,活跃人数为1。
- 使用count(distinct day(submi_time))计算活跃天数,在情况一中得到活跃天数为1,与题目要求不符;
- 使用count(day(submi_time))计算活跃天数,在情况三中得到活跃天数为2,与题目要求不符;
- 使用count(distinct uid, day(submi_time))计算活跃天数,在三种情况中均符合题目要求。
count(distinct 2个字段):将2个字段作为一个字段看待
求解代码
方法一:
#平均活跃天数
select
date_format(start_time,'%Y%m') as month,
round(count(distinct uid,day(submit_time))/count(distinct uid),2) as avg_active_days,
count(distinct uid) as mau
from exam_record
where year(submit_time) = 2021
and submit_time is not null
group by month