题解 | #计算用户的平均次日留存率#
计算用户的平均次日留存率
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);