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

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

https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453

select count(distinct q.device_id,q.date) / (select count(distinct device_id,date) from question_practice_detail) as avg_ret from question_practice_detail q 
join question_practice_detail qt 
on q.device_id = qt.device_id  
and adddate(q.date, interval 1 day) = qt.date;

这里我们可以用最简单的方式:

这里有一个隐藏的问题就是一个用户(device_id)在同一天刷了多题,在计算第二天回刷题目概率时,要把这部分数据distinct一下。

可以想象一个当表中只有A和B两个用户,他们都在'2022-02-02'这一天刷了题。A刷了一题,B刷了100题,B用户在

'2022-02-03'这一天刷了题而A用户没有刷,如果不distinct一下的话,我们算出来回刷率高达99%,而实际的回刷率应该是50%(这也就解释了为什么要distinct)

SQL书写方式是

1.先是用inner join自联结限定device_id相等,date互相差一天,并且把符合结果的数据集按照device_id和date来distinct一下将结果集作为分子

2.再直接从表中select count(disctint device_id,date) from question_practice_detail作为分母

答毕。

全部评论

相关推荐

就在我现在公司的隔壁每天经过都唏嘘不已(就是羡慕)什么时候可以到这里上班啊
柯基在debug:从大学毕业投简历到现在了,应届的时候我都面到终面了,现在工作四年了连简历初筛都过不了了
投递莉莉丝游戏等公司8个岗位
点赞 评论 收藏
分享
06-27 15:15
长安大学 Java
哈哈哈,你是老六:这种就是培训机构骗钱的
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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