查询每日新用户的次日留存率

牛客每个人最近的登录日期(五)

http://www.nowcoder.com/questionTerminal/ea0c56cd700344b590182aad03cc61b8

1.先查询首次登录的新用户;

select user_id, min(date) from login group by user_id;

2.查询第二天登录的新用户;

select 
     t1.user_id, t2.user_id, t1.date
from 
    (select user_id, min(date) as date from login group by user_id) t1     
left join
    login t2
on 
    t1.user_id = t2.user_id and t2.date = date_add(t1.date, interval 1 day)

3.按首次登录的日期分组,第二天登录的新用户总数/第一天登录的新用户总数

select 
     t1.date as date, count(t2.user_id)/count(t1.user_id) as p
from 
    (select user_id, min(date) as date from login group by user_id) t1     
left join
    login t2
on 
    t1.user_id = t2.user_id and t2.date = date_add(t1.date, interval 1 day)
group by t1.date   

4.并集

union

5.当天没有新用户登录的日期

select 
    distinct(date) , '0.000'
from
    login
where
    date not in (select min(date) from login group by user_id);

6.留存率记得四舍五入,按日期排序,完整的SQL语句

select 
     t1.date as date, round(count(t2.user_id)/count(t1.user_id),3) as p
from 
    (select user_id, min(date) as date from login group by user_id) t1     
left join
    login t2
on 
    t1.user_id = t2.user_id and t2.date = date_add(t1.date, interval 1 day)
group by t1.date  
union
select 
    distinct(date) as date, '0.000' as p
from
    login
where
    date not in (select min(date) from login group by user_id)
order by date
全部评论

相关推荐

流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
豆泥🍀:同26届,加油,我也还没找到查看图片
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务