新登录用户的次日成功的留存率

21 篇文章 2 订阅

新登录用户的次日成功的留存率

描述

统计一下牛客新登录用户的次日成功的留存率。

有一个登录(login)记录表,简况如下:
img

请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入),上面的例子查询结果如下:
img

查询结果表明:

user_id为1的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存

user_id为2的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存

user_id为3的用户在2020-10-12第一次新登录了,在2020-10-13没登录了,算是失败的留存

user_id为4的用户在2020-10-13第一次新登录了,在2020-10-14没登录了,算是失败的留存

示例1:

drop table if exists login;
CREATE TABLE `login` (
`id` int(4) NOT NULL,
`user_id` int(4) NOT NULL,
`client_id` int(4) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO login VALUES
(1,2,1,'2020-10-12'),
(2,3,2,'2020-10-12'),
(3,1,2,'2020-10-12'),
(4,2,2,'2020-10-13'),
(5,4,1,'2020-10-13'),
(6,1,2,'2020-10-13'),
(7,1,2,'2020-10-14');
0.500

解题

新登录用户的次日成功的留存率,首先把公式列出来:

(第一天登录的新用户并且第二天也登录的用户)/(总用户)即为新登录用户的次日成功的留存率

总用户其实挺好算,如下:

select count(distinct user_id) from login

找到每个用户第一天登陆的日子,其实挺好找,和前面找最近登录的日子差不多,一个是max,一个是min:

select user_id,min(date) from login group by user_id

比如上面查找语句是1,2020-10-12;那么如果找到一个结果为1,2020-10-13的那么是不是就符合结果了,于是可以如下写:

select user_id,date(min(date),'+1 day') from login group by user_id

这样就可以找到所有的在第一天登录的新用户并且第二天也登录的用户,以及第二天的日期。

所以从这个里面找到所有的count(distinct user_id)除以总用户就可以得到结果了,于是整个sql语句如下:

select 
round(count(distinct user_id)*1.0/(select count(distinct user_id) from login) ,3)
from login
where (user_id,date)
in (select user_id,date(min(date),'+1 day') from login group by user_id);

mysql的解法为:

select 
round(count(distinct user_id)*1.0/(select count(distinct user_id) from login) ,3)
from login
where (user_id,date)
in (select user_id,DATE_ADD(min(date),INTERVAL 1 DAY) from login group by user_id);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章鱼哥TuNan&Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值