题解 | #计算用户的平均次日留存率#
计算用户的平均次日留存率
https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453
# 题目中的“用户在某天刷题后第二天还会再来刷题”需要通过比较同一个device_id在date和date+1两天都有答题数据。 # 需要通过datediff(date1,date2)=1来判断是否连续两天都有答题数据。 # 因为需要计算用户的平均次日留存率,如果用户次日没有留存,则因为不符合连接条件而为空,所以需要通过外连接来实现。除数就是有数据的COUNT DISTINCT值,被除数就是全数据的COUNT DISTINCT值 select count(distinct q2.device_id ,q2.date )/count(distinct q1.device_id,q1.date) as avg_ret from question_practice_detail as q1 left outer join question_practice_detail as q2 on q1.device_id=q2.device_id and datediff(q2.date,q1.date) = 1
深刻理解表连接,左连接的两张表,从表不满足筛选条件的话,它的数据为null,这样我们在筛选的时候只会有值的数据(并且,这个值是表连接之后还有值,假如这个表原来是有值的,它连接过滤之后也可能是没有值的)
然后深刻理解count(distinct)的含义,这个count(device_id,date)有一个不同就行
比如
id date
2 02.01
2 02.02