知识点
- 四舍五入三位小数round(留存率,3)
- 判断新用户就是登陆日期最小,第二天留存就是最小登陆日期加1也存在记录
- 用where(用户id, 日期) in进行筛选,把原表按照用户id进行分组最小日期+1存在的符合要求。除以总的用户数量就是留存率
- date_add(date,interval expr type ) 函数向日期添加指定的时间间隔。type可以是day year hour等
代码
select
round(count(distinct user_id)/(select count(distinct user_id) from login), 3) as p
from login
where (user_id,date)
in (select user_id, date_add(min(date),interval 1 day)
from login
group by user_id)