知识点

  1. 四舍五入三位小数round(留存率,3)
  2. 判断新用户就是登陆日期最小,第二天留存就是最小登陆日期加1也存在记录
  3. 用where(用户id, 日期) in进行筛选,把原表按照用户id进行分组最小日期+1存在的符合要求。除以总的用户数量就是留存率
  4. 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)