次日留存率=在第一天登录后第二天还登录的人数/第一天登录的人数
第一种
select round(
count(distinct l1.user_id)/( select count(distinct user_id) from login)
, 3)
from login l1
inner join (
select user_id, min(date) as date -- 找出第一次时间
from login
group by user_id
) l2 on l1.user_id=l2.user_id and l1.date=DATE_ADD(l2.date, INTERVAL 1 DAY) -- 次日时间第二种:
select round(
count(distinct l1.user_id) / t.cnt_total, 3
)
from login l1
inner join login l2 on l1.user_id=l2.user_id and date(l2.date)-date(l1.date)=1 -- 间隔一天的日期
inner join (
select count(distinct user_id) as cnt_total -- 找到首次访问的人数
from login
) as t
京公网安备 11010502036488号