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

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

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

select
t1.dt as installDate,
round(count(distinct case when t2.dt=date_add(t1.dt,interval 1 day) then t2.uid end)/count(distinct t1.uid),2) as uv_left_rate
from
(
select
uid,min(date_format(in_time,'%Y-%m-%d')) dt -- 这里其实有个细节要注意,因为对象是每天新用户,增加min
from
tb_user_log 
group by uid
) t1
left join 
(
select
uid,date_format(out_time,'%Y-%m-%d') dt 
                               -- 这里其实有个细节要注意,测试用例有一个视频播放是跨天的,用out_time
from
tb_user_log 
) t2
on t1.uid=t2.uid 
where month(t1.dt)=11 
group by installDate;

这里给出一种通用的解法,求次日留存率,次七日留存都可以这样写

  1. 将两张带有uid和时间的表通过左连接连接起来,连接条件只需要uid同
  2. 在select部分用case when处理条件,次七日留存就这样写t2.dt<=date_add(t1.dt,interval 7 day)

如果有一张订单表order还能计算转化率和ITV,通过uid和时间左连接,order表和t2时间同

这是面试官教写的一种方法,应该比较类似于实际应用中的写法

全部评论

相关推荐

每晚夜里独自颤抖:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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