题解 | #计算用户的平均次日留存率#
计算用户的平均次日留存率
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的话直接不选择这一条数据(会导致这条数据中左表的值丢失)