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

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

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

全部评论

相关推荐

哞客37422655...:兄弟别慌!💪 民办本找实习确实难点,但不是没机会。100+简历才2个面试,可能简历需要优化下: 项目经历写具体点,突出测试用例、bug数量等 技能栏把测试工具/方法论写清楚 可以考虑降低预期,先进小厂积累经验 测试岗相对好进,坚持投!现在才半个月,有人投3个月才上岸的😭 加油,offer在路上了🚀
点赞 评论 收藏
分享
浅白lw:其实是牛马自己换马了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务