SELECT
    -- 计算留存的用户天数 / 总的用户活跃天数
    COUNT(t2.device_id) / COUNT(t1.device_id) AS avg_ret
FROM
    -- t1 代表所有用户活跃的记录 (去重)
    (SELECT DISTINCT device_id, date FROM question_practice_detail) AS t1
LEFT JOIN
    -- t2 也代表所有用户活跃的记录,用于匹配第二天是否回归
    (SELECT DISTINCT device_id, date FROM question_practice_detail) AS t2
ON
    t1.device_id = t2.device_id  -- 匹配同一个用户
    AND t2.date = DATE_ADD(t1.date, INTERVAL 1 DAY); -- 匹配 t1 的后一天