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
