题解 | #2021年11月每天新用户的次日留存率#

2021年11月每天新用户的次日留存率

http://www.nowcoder.com/practice/1fc0e75f07434ef5ba4f1fb2aa83a450

【新用户次日留存率】计算思路
1、先查询出个用户首次出现的日期frist_date,得到<新用户登录表>。使用group by,按uid分组,查找出min(dt)
2、再将<新用户登录表><用户活跃表>连接,使用left join。只有同一用户并且该用户第二天依旧登录才会保留记录,否则右表记录为空。因此连接条件需要满足2:
  1. 同一个用户:表1.uid=表2.uid
  2. 首日登录,第二天依然登录:date_add(表1.first_date,interval 1day)=表2.date
3、最后,按照frist_date进行分组,使用count()计算首日人数及次日人数

除解题思路以外,本题还有一个小难点,即如何计算:如果in_time-进入时间out_time-离开时间跨天了,在两天里都记为该用户活跃过。需要进行并集操作,将登录时间和登出时间去并集,这里使用union,会去重。由此得到<用户活跃表>

综上,代码如下↓↓↓
select a.first_dt dt,round(count(b.uid)/count(a.uid),2) uv_left_rate from
(select uid,date(min(in_time)) first_dt from tb_user_log
GROUP BY uid) a
LEFT JOIN 
(select uid,date(in_time) dt from tb_user_log
UNION
select uid,date(out_time) dt from tb_user_log )b
on a.uid=b.uid 
and DATE_ADD(a.first_dt,INTERVAL 1 day)=b.dt
where date_format(a.first_dt,'%Y-%m')='2021-11'
GROUP BY a.first_dt
order by dt
;


全部评论

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
这是什么操作什么意思,这公司我服了...
斯派克spark:意思是有比你更便宜的牛马了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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