新的题解思路 | #牛客每个人最近的登录日期(三)#

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

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##我的实习求职记录##用户留存率#
全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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