1.
这里我们可以看出有两种情况,要么活跃,要么不活跃,我的思路是统计出不活跃的, 并计算出他们所占比例,再用1减去他们所占比例,就可以得到留存率。大致思路就这样,具体代码后面补。下面代码为老师提供的一种查询代码,可供参考。
select t2.dt as dt, ifnull(round(new_user/dau,2), 0.00) as uv left rate
from(
-- 每天的新用户数
select dt,count(1) new_user
from(
-- 用户第一次登录时间
select uid,min(date(in_time)) dt
from tb_user_log
group by uid) as t
group by dt
) as t1
-- 因为有可能某天没有新用户数,因此要右连接
right join(
-- 每日活跃用户数
select dt,count(distinct uid) dau
from(
select uid,date(in_time) dt from tb_user_log -- 先在里面date()
union all
select uid,date(out_time) dt from tb_user_log
) as t
group by dt
) as t2
on t1.dt = t2.dt