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

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

https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8?tpId=82&tags=&title=&difficulty=0&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%3Fpage%3D2%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82

我的方法:

select login.date,round(if(count(t1.user_id)=0,0,count(t2.user_id)/count(t1.user_id)),3)
from login 
left join (select user_id,min(date)md from login group by user_id) t1 
on t1.user_id=login.user_id and t1.md=login.date 
left join login t2 
on t2.user_id=t1.user_id and t2.date=date_add(t1.md,interval 1 day)
group by login.date
order by login.date
  • 其中判断分母为0可以用ifnull(round(count(distinct t2.user_id)/(count(t1.user_id)),3),0)。
  • 对于没有新用户登录的日期,除了用原表左连接,还可以用当前日期不存在的union

其他方法:没有用表连接+count,用的in+sum,我感觉表连接效率会更高?

select date
    ,ifnull(round((sum(case when (user_id,date)in
        (select user_id,date_add(date,interval -1 day)
         from login)  and (user_id,date)in (select user_id,min(date)from 
login group by user_id)
        then 1 else 0 end))/
    (sum(case when (user_id,date)in
        (select user_id,min(date)from login group by user_id)
        then 1 else 0 end)),3),0)as p
from login
group by date
order by date;
SQL题解 文章被收录于专栏

主要是为自己做个笔记

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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