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

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

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  









全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-29 21:31
大疆 硬件工程师 30.0k*15.0
快要三方开始纠结offer的到期男大:dji和影石我理解开奖了,华为你这个15级是怎么问出来的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务