题解 | #计算用户的平均次日留存率#
计算用户的平均次日留存率
https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453
SELECT AVG(IF(b.date IS NULL, 0, 1)) avg_ret
FROM (SELECT DISTINCT device_id, date
FROM question_practice_detail) a
LEFT JOIN (SELECT DISTINCT device_id, date
FROM question_practice_detail) b
ON DATEDIFF(b.date,a.date) = 1
AND a.device_id = b.device_id;
用AVG(IF())的形式计算平均值,自连接以筛选连续两天答题的人,左连接是为了计算分母。
一开始使用原表自连接,计算结果为0.45,发现这样会重复计算连续两日答题且单日答了复数道题的人,因此把两张表改成两个子查询,先选出去重的人、日期数据,再进行计算。
安克创新 Anker公司福利 782人发布