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

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

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

SELECT
    count(distinct q2.device_id, q2.date) / count(distinct q1.device_id, q1.date) as avg_ret
FROM
    question_practice_detail q1
    left outer join question_practice_detail q2 on q1.device_id = q2.device_id
    and datediff (q2.date, q1.date) = 1;
# 为什么distinct要加上device_id,因为要确保去重的是同一行
# 为什么用left join而不是join,因为join的话原表会在右边
# 为什么用and而不是where,因为用and的话即使右表没有数据也会填充null值,而用where的话直接不选择这一条数据(会导致这条数据中左表的值丢失)

全部评论

相关推荐

09-29 15:34
已编辑
北京航空航天大学 C++
做个有文化的流氓:结果是好的,过程不重要,而且你的offer太多了
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
渴望wlb的牛油果很...:直说卡第一学历不就行了 非得拐弯抹角
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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