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

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

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

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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 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

全部评论

相关推荐

找到实习就改名4月17日下午更改:1600一个月?
点赞 评论 收藏
分享
ldf李鑫:不说公司名祝你以后天天遇到这样的公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务