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

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

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

select f_day,round(sum(if(a>0,1,0))/count(distinct uid),2) from(
select u.uid,f_day,
sum(if(date_format(out_time,'%Y-%m-%d')=s_day or date_format(in_time,'%Y-%m-%d')=s_day,1,0)) a 
from tb_user_log t
left join (
    select uid,date_format(min(in_time),'%Y-%m-%d') f_day,
    date_add(date_format(min(in_time),'%Y-%m-%d'),interval 1 day) s_day
    from tb_user_log 
    group by uid
) u  on u.uid=t.uid
where date_format(f_day,'%Y-%m')='2021-11'
group by f_day,u.uid
) l
group by f_day
order by f_day
#(1)先将每个user登陆的第一天和第二天提取出来作为新表LEFT JOIN原表当中,这个时候可以判断第一天是不是在2021-11。
#(2)之后按照user进行GROUP BY,如果user的in_time或oue_time中包含第二天,那么就可以认为这个新用户是第一天登录并且第二天也活跃了,生成一个新字段,用1表示上述用户,0表示不符合条件的用户。
#(3)之后按照第一天进行GROUP BY,对于上述新字段求和就可以得到每天符合条件的user,除以count(user)或者count(新字段)得到留存比率。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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