题解 | #平均活跃天数和月活人数#
平均活跃天数和月活人数
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'))
查看1道真题和解析