题解 | #计算用户的平均次日留存率#

计算用户的平均次日留存率

https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453

某天刷题后第二天还会再来刷题的平均概率思路

首先需要知道求概率的分子和分母分别是什么:

分母:不同用户在表中出现过不同日期的总次数
分子:不同用户在表中出现日期的前一天日期也存在表中的总次数

分母的查询

select count(distinct device_id,date) dc
from question_practice_detail;

分子的查询

select count(distinct t2.device_id,t2.date)
from question_practice_detail as t1
join question_practice_detail as t2
on t1.device_id = t2.device_id and t2.date = date_add(t1.date, interval 1 day)
需要知道是否前一天也出现过需要用到联表操作,条件为用户相同和日期相同。
因同个日期有多个用户,用户可能在同个日期做多道题,所以需要对device_id和date的元组消去重复值,即用distinct关键词

最后分子除以分母得到最终值

select
(select count(distinct t2.device_id,t2.date)
from question_practice_detail as t1
join question_practice_detail as t2
on t1.device_id = t2.device_id and t2.date = date_add(t1.date, interval 1 day)) /
(select count(distinct device_id,date) dc
from question_practice_detail);






#MySQL#
全部评论

相关推荐

不愿透露姓名的神秘牛友
12-16 15:57
小鹏汽车 java后端 22*15(固定13,2个月年终) 硕士211
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

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