262题解 | 利用窗口函数解题

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

https://www.nowcoder.com/practice/16d41af206cd4066a06a3a0aa585ad3d

step 1:利用窗口函数找到各自user_id对应的第二天登陆时间

select *
,date_add(min(date) over(partition by user_id),interval 1 day) d2 --d2表示第二天登陆时间
from login

step 2:找到每个user_id下,date 与第二天登陆时间d2相等的user_id即为留存成功

select count(*)
from (
    select *
    ,date_add(min(date) over(partition by user_id),interval 1 day) d2
    from login
) a
where d2=date

step3:求user_id数

--不能group by之后利用count求和
--此时得到的是:依据不同user_id分组后,各个组内的行数
--得到的结果是向量,让我反应过来不对
select count(*)
from login
group by user_id


--正确求user_id数的方法
select count(distinct user_id)
from login

step4:合并代码块,最终结果

select round(count(*)/(select count(distinct user_id) from login), 3)
from (
    select *
    ,date_add(min(date) over(partition by user_id),interval 1 day) d2
    from login
) a
where d2=date

全部评论

相关推荐

评论
点赞
2
分享

创作者周榜

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