留存率公式:
留存率 = (第一天且第二天均登录的用户数)/(总的用户数)
第一步:获得总的用户数
select count(distinct user_id) from login
第二步:构建新表,在原表的基础上以min(date)为基础构建第二天字段
select user_id, date_add(min(date), interval 1 day) next_day from login group by user_id
第三步:从原表的user_id和date两个字段作为查询条件在第二步构建的新表中对user_id进行计数,即可获得第一天且第二天均登录的用户数
select count(distinc user_id) from login where (user_id, date) in ( select user_id, date_add(min(date), interval 1 day) next_day from login group by user_id )
最后,根据公式,获得留存率,即最终SQL
select round(count(distinct user_id) / ( select count(distinct user_id) from login), 3) p from login where (user_id, date) in ( select user_id, date_add(min(date), interval 1 day) next_date from login group by user_id )