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

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

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

SELECT a.date,ROUND(
    COUNT(DISTINCT login.user_id)/ COUNT(a.user_id)
    ,3) AS p
FROM (SELECT user_id,MIN(date) AS date 
    FROM login 
    GROUP BY user_id) AS a
LEFT JOIN login
ON login.user_id=a.user_id
AND login.date=DATE_ADD(a.date,INTERVAL 1 DAY)
GROUP BY a.date
UNION
SELECT date,0.000 AS p
FROM login
WHERE date NOT IN(
    SELECT MIN(date) 
    FROM login 
    GROUP BY user_id)
ORDER BY date;

1、求新用户第一天的登录日期

SELECT user_id,MIN(date) AS date 
    FROM login 
    GROUP BY user_id

2、新用户第二天留存

LEFT JOIN login
ON login.user_id=a.user_id
AND login.date=DATE_ADD(a.date,INTERVAL 1 DAY)

3、UNION补上没有新用户登录的日期

UNION
SELECT date,0.000 AS p
FROM login
WHERE date NOT IN(
    SELECT MIN(date) 
    FROM login 
    GROUP BY user_id)
ORDER BY date;

完整代码如下:

SELECT a.date,ROUND(
    COUNT(DISTINCT login.user_id)/ COUNT(a.user_id)
    ,3) AS p
FROM (SELECT user_id,MIN(date) AS date 
    FROM login 
    GROUP BY user_id) AS a
LEFT JOIN login
ON login.user_id=a.user_id
AND login.date=DATE_ADD(a.date,INTERVAL 1 DAY)
GROUP BY a.date
UNION
SELECT date,0.000 AS p
FROM login
WHERE date NOT IN(
    SELECT MIN(date) 
    FROM login 
    GROUP BY user_id)
ORDER BY date;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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