SQL68 牛客每个人最近的登录日期(三)

 

条件

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

 

要求

1、新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率

2、保存小数点后面3位(3位之后的四舍五入)

上面的例子查询结果如下:

 

解析

新登录用户次日成功的留存率 = 次日用户留存的数量 / 总用户

总用户的数量为

select count(distinct user_id) 
from login

次日用户留存的数量为用户第一天登录,且第二天还登录的用户数量

select count(user_id)
from login 
where (user_id, date) in (select user_id, date_add(min(date), interval 1 day) 
                  from login
                  group by user_id);

联立可得

select round(1.0 * count(distinct l1.user_id) / count(distinct l2.user_id), 3)
from login as l1, login as l2
where (l1.user_id, l1.date) in 
(select user_id, date_add(min(date), interval 1 day) 
                  from login
                  group by user_id);

PS:当天同一个用户可能不止登录一次,需要用distinct排除

 

posted @ 2021-09-12 12:22  人类补习计划  阅读(88)  评论(0)    收藏  举报