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

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

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

最近练习了大厂的题目,发现其实sql语句总量并不大,解题重点在于逻辑一定要清晰。一下有几个注意点 1:先将跨天的日期表生成,这种简单的行相加就用union函数就可以,其中union all不去重 而union则会自动过滤重复的行 2:如何判断新客户,可以理解以前没有出现过,所以可以统计累计出现次数,之前的题目可以学习到 sum+ over(order by)可以求累计和 3:一般看留存率的题目都可以使用左连接,这样第二天的数据如果缺少就会是null值,非常的常用 4: 一个常用技巧,使用

with xxxx as  (select xxxx)

语句可以保存临时select语句,反复运用某个临时表时可以加快速度,节省大量代码长度

with base as 
(select uid,dt,count(*) over(partition by uid order by dt) as times
from 
(select uid , left(in_time,10) as dt
from tb_user_log
UNION
select uid , left(out_time,10) as dt
from tb_user_log
order by dt,uid)   tmp
order by dt,uid)

select today.dt ,
       round(count(tommorw.dt)/ count(*),2)  
 from 
 base today left join base tommorw
 on today.uid=tommorw.uid and tommorw.dt=TIMESTAMPADD(day,1,today.dt)
 where today.times=1 and today.dt like '2021-11%'
 group by dt
 order by dt


全部评论
大佬你好,请问today 和 tomorrow这个是怎么做出来的呀
2 回复 分享
发布于 2022-01-30 14:34
把登录和登出union后,如果第1天登录,第3天登出,这种情况留存率就计算不到了呀?
3 回复 分享
发布于 2022-10-18 19:15 北京
today.dt like '2021-11%',这个筛选11月妙呀
1 回复 分享
发布于 2022-12-20 09:12 北京
真心求教 请问新用户当天来了两次这种情况可以解决吗
点赞 回复 分享
发布于 2022-03-18 11:33
请问大佬,为什么我把today.dt like '2021-11%',这个对月份的筛选条件放在base 临时表里的时候提交用例无法通过,显示多了一个2021年11月4日,留存率为0的结果?
点赞 回复 分享
发布于 2022-07-31 11:51

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
54 10 评论
分享
牛客网
牛客企业服务