题解 | 计算用户的平均次日留存率
计算用户的平均次日留存率
https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453
SELECT
ROUND(
SUM(CASE WHEN p2.date IS NOT NULL THEN 1 ELSE 0 END) / COUNT(*),
4
) AS avg_ret
# 得到当天刷题的人统计表(去除同一天多次刷题) 这里涉及到子查询,自连接左连接还有DATE_ADD日期增减函数的知识,
FROM
(SELECT DISTINCT device_id, date FROM question_practice_detail) p1
# 左连接,确保每个人当天刷题的日期都在,加上下一天的日期数据,没有的为NULL,
LEFT JOIN
(SELECT DISTINCT device_id, date FROM question_practice_detail) p2
ON p1.device_id = p2.device_id
AND p2.date = DATE_ADD(p1.date, INTERVAL 1 DAY)