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