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

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

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

select date,count(case when (user_id,date) in 
(select user_id,min(date)  
from login
group by user_id)
then 1 else null end) ne
from login
group by date 

结果如下:

再写出新用户次日登录人数表:

select date,count(case when (user_id,date) in
(select user_id,date_add(min(date),interval 1 day) 
from login
group by user_id)
then 1 else null end) re
from login
group by date 

结果如下:

两个表相连接后得到以下结果:

根据题目要求我们可以知道分母就是12号当天的新用户数,分子就是13号用户次日登录的个数,如果直接两列相除是不对的,需要往下偏移一行,用13号次日新用户登录人数/12号当天的新用户数,即2/3=0.667;

lead(a1.re,1)over(order by a1.date),结果如下

最后用偏移的列除以第一列即可,注意这里要用ifnull函数,完整代码如下

select a1.date date,ifnull(round(lead(a1.re,1)over(order by a1.date)/a2.ne,3),0) p
from
(
select date,count(case when (user_id,date) in
(select user_id,date_add(min(date),interval 1 day) 
from login
group by user_id)
then 1 else null end) re
from login
group by date ) a1      /*用户第二天也登录的人数*/
join 
(
select date,count(case when (user_id,date) in 
(select user_id,min(date)  
from login
group by user_id)
then 1 else null end) ne
from login
group by date     /*每天新用户的人数*/
) a2
on 
a1.date=a2.date  









全部评论

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 15:39
希望奇迹发生的布莱克...:真的是 现在卷实习就是没苦硬吃
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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