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

平均活跃天数和月活人数

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

select DISTINCT date_format(start_time,'%Y%m')  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  YEAR(start_time)='2021' and submit_time is not null
GROUP BY month
;

1.这里先是有一个按照时间分组的:GROUP BY date_format(start_time,'%Y%m')

具体的分类如下:

在 MySQL 中,DATE_FORMAT() 函数用于将日期转换为指定格式的字符串。你可以使用不同的格式代码来定义想要显示的日期格式。以下是一些常见的格式代码:

%Y:四位数的年份(例如:2022);
%y:两位数的年份(例如:22);
%m:两位数的月份(01-12);
%c:没有前导零的月份(1-12);
%d:两位数的日期(01-31);
%H:24小时制的小时数(00-23);
%h:12小时制的小时数(01-12);
%i:两位数的分钟数(00-59);
%s:两位数的秒数(00-59);
%p:AM 或 PM;
%W:星期的英文全名(例如:Sunday);
%a:星期的英文缩写(例如:Sun);
%M:月份的英文全名(例如:January);
%b:月份的英文缩写(例如:Jan)。

2.需要解决月活人数,去重的记数操作

COUNT(DISTINCT uid) AS mau

3.需要解决平均活跃天数=活跃总天数/月活人数

是否活跃看的是有交卷行为,交卷的末尾时间还有大量的null,count()记数的时候会记录,所以必须先过滤掉

where  YEAR(start_time)='2021' and submit_time is not null

之后还得看看是不是存在当天重复,统计按日期分组后的唯一 uid 数量。有这种语句,count(distinct 列,分组列)

round(count(distinct uid,date_format(submit_time,'%y%m%d'))

全部评论

相关推荐

12-24 14:26
东北大学 Java
一只乌鸦:重邮+东北,好经典的学校
最后再改一次简历
点赞 评论 收藏
分享
12-24 20:52
武汉大学 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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