题解 | #计算用户的平均次日留存率#
计算用户的平均次日留存率
https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453
开始搞不懂什么是用户的平均次日留存率,看了很多评论都不是很明白,后面终于搞懂了,这里记录一下这个概念:
这里的用户平均次日留存率指的是计算出用户连续登录两天的次数来除以所有用户登录的总次数(注意,这里同一个用户同一天登录两次只算做一次)
例如:
从上图来看,device_id为1的有一次两天连续登录,3有一次连续两天登录,那么两天连续登录的用户的次数就有2次,然后用户登录的总次数为6次,因为device_id为1的9月23是重复登录的,因此要去掉这一次,然后用2/6就是要算的平均次日留存率
sql代码:
select sum(cn)/( select sum(co) from (select count(distinct device_id) as co from question_practice_detail group by date ) as t ) from ( select count(distinct q1.device_id) as cn from question_practice_detail q1, question_practice_detail q2 where q1.device_id = q2.device_id and date_add(q1.date,interval 1 day)=q2.date group by q1.date) as m这里比较重要的一点是用了笛卡尔积来对连续两天登录的用户进行了筛选,可以在自己的mysql上跑出来看看表的结构,会更能理解

查看9道真题和解析
