解法一
1、查询总的用户数
select count(distinct user_id) from login2、查询新用户登录的第二天
select user_id,date_add(min(date), interval 1 day) as date from login group by user_id3、计算新用户次日登录的留存率
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) as date from login group by user_id);解法二 窗口函数
1、在原表中增加一列每个用户的第一次登录日期
select *, min(date) over (partition by user_id) d from login2、计算date=d+1 的个数即为次日登录的用户个数,与用户数的比值为留存率
select round(sum(case when date=date_add(d,interval 1 day) then 1 else 0 end)/count(distinct user_id),3) as p from (select *, min(date) over (partition by user_id) d from login) as a



京公网安备 11010502036488号