题解 | #牛客每个人最近的登录日期(五)#

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

https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8

select t1.date,
       -- 次日留存数/当日新增数,四舍五入取小数点后三位
       round(ifnull(count(t3.date)/count(t2.min_date),0),3) 
from ( 
    -- 获得去重排序的日期序列
    select date
    from login
    group by date
    order by date
) t1 
left join ( 
    -- 每个日期不一定都有新增用户,所以要用left join
    -- 这个表用于统计每日新增数,min_date为某用户的新增日期
    select user_id,min(date) min_date
    from login
    group by user_id
    order by user_id
) t2 on t1.date=t2.min_date
left join ( 
    -- 新增用户不一定会在次日登录,所以要用left join
    -- 这个表用于统计次日留存数
    select user_id,date
    from login
) t3 on t2.user_id=t3.user_id and datediff(t3.date,t2.min_date)=1
group by t1.date;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务