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

平均活跃天数和月活人数

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

明确题意:

计算2021年每个月里试卷作答区用户平均月活跃天数avg_active_days和月度活跃人数mau

问题拆解:

  • 本题主要是考察知识点:group by、date_format、substring,重点是对本题逻辑的理解!
  • 如果用户1在7-2号提交了2次,算作活跃1天本题貌似没有描述清楚......!!所以需要先按uid,year_month_day分组去重,得到表t1
  • DATE_FORMAT(submit_time, "%Y%m%d" ) 返回的是20210907这样;substring('abcdefghi',1,6) 返回的是1到6的子串abcdef;
  • mau=当月不重复的uid总数
  • avg_active_days = t1的记录总数 除以 mau

代码实现:

select 
substring(year_month_day,1,6) as month,
round(count(*) / count(distinct uid),2)  as avg_active_days,
count(distinct uid) as mau
from (
    select 
    uid,
    DATE_FORMAT(submit_time, "%Y%m%d" )  as year_month_day
    from 
    exam_record where score is not null  and year(submit_time) = '2021'
    group by uid, DATE_FORMAT(submit_time, "%Y%m%d" )
)t1 
group by substring(year_month_day,1,6) ;

中间表t1:
mysql>  select 
    ->     uid,
    ->     DATE_FORMAT( `submit_time`, "%Y%m%d" )  as year_month_day
    ->     from 
    ->     exam_record where score is not null 
    ->     group by uid, DATE_FORMAT( `submit_time`, "%Y%m%d" ) order by year_month_day ;
+------+----------------+
| uid  | year_month_day |
+------+----------------+
| 1002 | 20210702       |
| 1002 | 20210705       |
| 1002 | 20210901       |
| 1005 | 20210901       |
| 1006 | 20210901       |
| 1005 | 20210902       |
| 1006 | 20210902       |
| 1006 | 20210903       |
| 1002 | 20210905       |
| 1002 | 20210907       |
+------+----------------+
10 rows in set (0.00 sec)
结果:


不足之处,欢迎指正
全部评论
你好,请问一下,你自己在自己电脑安装的mysql里面是怎么运行起来的? 这不是都在牛客网的网页端写的吗,为啥你贴出来的运行图有的是mysql里的?
点赞 回复 分享
发布于 2022-02-06 15:15

相关推荐

评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务