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

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

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的话直接不选择这一条数据(会导致这条数据中左表的值丢失)

全部评论

相关推荐

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