题目描述:sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入)。
一、先找出所有用户id以及他们最开始的登录时间(表名mind_date):
select user_id,min(date)as mdate from login group by user_id
二、使用login表与一表进行连接,找出多少新用户第一天登录第二天也登陆(表名keep):
select count(l.user_id) as keep
from login l join min_date m
on l.user_id=m.user_id
and l.date =adddate(m.mdate,interval 1 day)三、算出所有用户数(表名total):
select count(distinct user_id) as total from login
根据公式新用户次日留存率=(第一天和第二天都登陆的用户数)/(总用户数)
最终结果:
with min_date as
(
select user_id,min(date)as mdate
from login
group by user_id
),
keep as
(
select count(l.user_id) as keep
from login l join min_date m
on l.user_id=m.user_id
and l.date =adddate(m.mdate,interval 1 day)
),
total as
(
select count(distinct user_id) as total
from login
)
select round(keep.keep/total.total,3) as p
from keep,total
京公网安备 11010502036488号