计算新用户留存率思路:
1.查找每日的新用户:所有用户登录日志中in_time最小值为当天新用户;
2.查找新用户次日活跃:新用户次日登录,或in_time-进入时间和out_time-离开时间跨天了,在两天里都记为该用户活跃过;
3.新用户表左连接活跃用户表,无新用户当日不展示;
函数注记:
1.union和union all的区别:union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高
2.date_sub的用法:date_sub(date,interval expr type),函数从日期减去指定的时间间隔,type类型有DAY、HOUR、MINUTE、SECOND、WEEK、MONTH等
select t1.dt,round(count(t2.uid)/count(t1.uid),2) uv_left_rate from (select uid,min(date(in_time)) dt from tb_user_log group by uid) t1 #新用户表 left join (select uid,date(in_time) dt from tb_user_log #union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高 union select uid,date(out_time) dt from tb_user_log)t2 #活跃用户表 #date_sub(date,interval expr type),函数从日期减去指定的时间间隔 on t1.uid=t2.uid and t1.dt=date_sub(t2.dt,interval 1 day) where date_format(t1.dt,'%Y-%m')='2021-11' group by t1.dt order by t1.dt ;

京公网安备 11010502036488号