请计算2021年每个月里试卷作答区用户平均月活跃天数avg_active_days和月度活跃人数mau. 注:此处活跃指有交卷行为。

求月活跃按group by month即可

但是该题有一个难点大部分人都容易出错,那就是计算平均月活天数的公式。

平均月活=该月活跃天数/该月总活跃人数

count(submit_time)/count(distinct uid)

这样是明显错误的,分母没有问题,但是分子是不对的。

举个例子 用户1在某月的一号活跃了两次,二号活跃了三次。那么其实该用户的活跃天数是2天。我们应该使用

count(distinct uid,date(submit_time))

来计算该月的活跃天数。

完整代码如下:

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 mc,
count(distinct uid ) as mau
from exam_record 
where year(submit_time)=2021 
group by month