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

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

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

登录表join
(子查询出用户第一次登录日期)
再join 第一次登录后 第二天登录
最后 groupby 日期后
数新用户第二天登录不为None的 除以是当日首次登录的

注意要处理分母-当日首次登录用户数 为0的情况,用case when处理了
因为当日首次登录用户为0 那么对应的新用户第二天登录也为0
所以 当日首次登录用户数改成1 就能直接÷了

select 
    l.date,
    round(count(l2.date)/
          (case count(fst_log_tbl.first_date) 
           when 0 then 1 
           else count(fst_log_tbl.first_date) end),3) p
from login l
left JOIN
    -- first login table
    (select user_id,
        min(date) as first_date
    from login
    group by user_id) fst_log_tbl
    on l.user_id=fst_log_tbl.user_id
    and l.date = fst_log_tbl.first_date
left JOIN
    login l2
    on l.user_id=l2.user_id
    and date_add(fst_log_tbl.first_date,INTERVAL 1 day) = l2.date
group by l.date
order by l.date;
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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