题解 | #平均活跃天数和月活人数#
平均活跃天数和月活人数
http://www.nowcoder.com/practice/9e2fb674b58b4f60ac765b7a37dde1b9
要求
请计算2021年每个月里试卷作答区用户平均月活跃天数avg_active_days和月度活跃人数mau
思路
- 2021年: YEAR(submit_time) = 2021
- 每个月: group by month -- extract(YEAR_MONTH from submit_time) as month -- YEAR_MONTH 能直接取出年月
- 用户平均月活跃天数: round(count(distinct concat(uid,date(submit_time))) / count(distinct uid),2)
相同用户同一天多次答题只算一天所以这里要用distinct去除同一uid一天内多次答题。 并且,两个不同用户同一天答题算两天,所以为了识别是同一用户一天内多次答题还是不同用户同一天答题,我们用 concat(uid,date(submit_time) 将 uid 和 日期剪贴到一起,这样就能用count 正确的计算了。下面是concat(uid,date(submit_time) 的输出结果 (如果想好看点,中间可以加个空格分隔开)
PS:这里只要date,不要把time一起加上去,因为同一天不同时间提交会导致重复计算。
- mau: count(distinct uid)
实现
select extract(YEAR_MONTH from submit_time) as month,
round(count(distinct concat(uid,date(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