-- 计算次日留存率,并保留三位小数
select 
    round(
        count(distinct user_id) / 
        (select count(distinct user_id) from login), 
        3
    ) as retention_rate
from login
where (user_id, date) in 
    (
        -- 选择每个用户首次登入后的次日日期
        select 
            user_id,
            date_add(min(date), interval 1 day)
        from login
        group by user_id
    );