题解 | #计算用户的平均次日留存率#
计算用户的平均次日留存率
http://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453
我理解的就是
- 先拿到第一天登录的用户个数(去重)
- 再拿到 第二天登录的用户中,在第一天也登录过的用户 的个数
- 考虑到要求平局值, 只选取某两天的数据也不行,干脆直接拿到整表的数据,错位左连接即可
select count(t3.date2) / count(t3.device_id) from
(
select distinct t1.device_id, t1.date as date1, t2.date as date2
from question_practice_detail as t1 -- 第一天上线做过题的所有人
left outer join
(select distinct device_id, date from question_practice_detail) as t2 -- 自连接
-- 错位连接 同一用户 第二天也上线过的,就会被左连接记录,没有的就不会被左连接记录
-- 这样date1就是记录的所有第一天来过的用户, date2就是记录的所有第一天来过 且第二天也来过的用户,date2列的null值,就是所有的第一天来过,但是第二天没来过的人
on t1.device_id = t2.device_id and t1.date = date_add(t2.date,interval 1 day)
) as t3