每个日期新用户的次日留存率

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

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

/*
with a as(
    select 
        user_id,
        min(date) min_date
    from login 
    group by user_id
),
b as(
    select distinct date from login
),
new_user as (
        select b.date,user_id
        from b left join a on b.date=a.min_date
),
count_newuser as(
    select date,count(user_id) newuser_cnt
    from new_user
    group by date
),
t2 as(
    select user_id,date_sub(min(date),interval 1 day) date_mark
    from login
    where (user_id,date) not in (
        select user_id,min(date) from login
        group by user_id
    ) 
    group by user_id
),
newuser_next as(
    select 
        date_mark date,
        user_id
    from t2
    where (user_id,date_mark) in (select user_id,date from new_user)
),
count_newuser_next as(
    select date,
        count(user_id) nextnewuser_cnt
    from b
    left join newuser_next using(date)
    group by date
)

select date,
    coalesce(round(nextnewuser_cnt/newuser_cnt,3),0) p
from count_newuser
left join count_newuser_next using(date)
*/
with newuser_in_nextdate as(
    select 
        a.date,
        b.user_id newuser,
        c.user_id newuser_next,
        c.date date_next
    from (select distinct date from login) a
    left join (select user_id,min(date) min_date from login
            group by user_id) b
    on a.date=b.min_date
    left join login c 
    on b.user_id=c.user_id and datediff(c.date,a.date)=1
)

select 
    date,
    coalesce(round(count(newuser_next)/count(newuser),3),0) p
from newuser_in_nextdate
group by date

/*coalesce(column,0) 若列值为空值,替换为0;若不为空值,就取原值。
*/





全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务