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

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

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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务