此题问:新登录用户次日成功的留存率
会用到 count() 与 round()
select round(count(l1.date)/count(*),3) p
from login l1
right join( select user_id,min(date) firstday
from login group by user_id ) l2
on l1.user_id = l2.user_id
and l1.date = DATE_ADD(l2.firstday,INTERVAL 1 day);
- l2 是首次登录的全部用户id与登陆日期
- l1 通过user_id右连接l2,且用date_add(次日的日期)限定日期
- 那么l1.date就是次日还有登录的用户的日期
- count(*) 就是 count(l2.firstday)