新的题解思路 | #牛客每个人最近的登录日期(三)#
牛客每个人最近的登录日期(三)
https://www.nowcoder.com/practice/16d41af206cd4066a06a3a0aa585ad3d
计算用户次日留存率,首先附上完整的MySQL运行答案:
select round(count(*)/(select count(distinct user_id) from login),3) from ( select user_id, min(`date`) `date` from login group by user_id ) a where (a.user_id, DATE_ADD(a.`date`,INTERVAL 1 DAY)) in (select user_id, `date` from login)
详解如下:
① 首先,按user_id分组,获取每个用户的最早登陆日期。记作表 a 。
( select user_id, min(`date`) `date` from login group by user_id ) a
② 表 a 中的日期+1就是用户第二天登陆的日期。这些日期在login表中可能存在也可能不存在,筛选出存在于login表的数据即为次日留存的数据。
select count(*) from a where (a.user_id, DATE_ADD(a.`date`,INTERVAL 1 DAY)) in (select user_id, `date` from login)
③ 由于表 a 在第一步已经去重了。最后只要再比上总用户数量,就可以得到次日留存率。
select count(distinct user_id) from login#牛客##商分##MySQL##我的实习求职记录##用户留存率#
