题解 | #平均活跃天数和月活人数#

平均活跃天数和月活人数

https://www.nowcoder.com/practice/9e2fb674b58b4f60ac765b7a37dde1b9

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
    month

1.平均活跃天数= 总活跃天数 / 月活人数。关键的是求解总活跃天数,总活跃天数是每天活跃用户数之和。

2.如果一个人一天活跃多次(也就是提交多次试卷),那么在总活跃天数里只能算一天,所以对用户uid和和提交时间submit_time作为组合同时去重。这里不能用uid和start_time是因为有些用户有start_time,但是没有交卷,submit_time是为null的,这样不能算是活跃。

注意,一天有n个用户活跃,那么总活跃天数是算n的。

3.为什么在对uid和submit_time去重时要使用date_format()格式化日期?这是因为submit_time本身是精确到几点几分几秒的,如果是COUNT(DISTINCT uid, submit_time)会导致假如同一用户在同一天两次不同时间提交,那么会被算作2,只有把submit_time提取成年月日,才能去重为1。

4.DATE_FORMAT(datetime, '%Y%m%d')注意m和d要小写。也可以换成其他形式,例如DATE_FORMAT(datetime, '%Y-%m-%d')

全部评论

相关推荐

Rena1ssance_:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
05-26 09:07
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务