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

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

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

思路如注释所示。

SELECT l.date, 
    ROUND(
    (CASE
    WHEN SUM(l.user_id = t.user_id AND l.date = t.first_date) = 0 THEN 0 #当天没有新用户,需要分类讨论以避免分母为0情况
    ELSE 
    SUM(l.user_id = t.user_id AND l.date = t.first_date AND
        DATE_ADD(l.date, INTERVAL 1 DAY) IN (SELECT date FROM login WHERE login.user_id = l.user_id))/ #分子是当天为新用户且次日登录的数目
        SUM(l.user_id = t.user_id AND l.date = t.first_date) #分母为当天为新用户的数目
    END), 3) AS p
FROM
    (SELECT l.user_id, MIN(l.date) AS first_date
    FROM login AS l
    GROUP BY l.user_id) AS t, #创建一个第一次登录日期表,以判断用户是否是第一次登录
    login AS l
GROUP BY l.date
ORDER BY l.date;
全部评论

相关推荐

孙艹肘:校招不给三方直接让实习我都去了,,主打一个在学校呆着也是闲着,不如出来实习一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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