SQL留存率问题

题目:统计2021年11月每天新用户的次日留存率(保留2位小数)

思路:

1.统计每个用户首次登陆时间,使用group by和min聚合,作为t1

2.将in_time和out_time分别取出,使用union进行行连接,自动实现去重,

得到每个用户的所有登陆日期,作为t2

3.将t1和t2连接,uid作为key,关键是要加上条件t1.dt = date_sub(t2.dt, interval 1 day)

4.使用group by对dt进行分组,计算t1.dt数量作为全部,计算t2.dt数量作为次日活跃

select
    t1.dt,
    round(count(t2.dt)/ count(t1.dt), 2) uv_left_rate
from
    (
        SELECT
            uid,
            min(date(in_time)) dt
        from
            tb_user_log a
        group by
            uid
    ) t1
    left join (
        select
            uid,
            date(in_time) dt
        from
            tb_user_log
        union
        select
            uid,
            date(out_time)
        from
            tb_user_log
    ) t2 on t1.uid = t2.uid
    and t1.dt = date_sub(t2.dt, interval 1 day)
group by dt
order by dt

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务