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

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

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

编译能通过,不知道有没有逻辑错误。若有误,劳烦大家指正。

第一步:通过对每个用户GROUP BY,找出各用户及其的首次登录时间,结果为x:

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

第二步:在第一步基础上通过对日期GROUP BY,统计出每天新用户登录数(会漏掉没有新用户登录的日期),结果为y:

SELECT x.d,COUNT(x.user_id) c
FROM x
GROUP BY x.d

第三步:通过外链接补上第二步中漏掉没有新用户登录的日期(该步骤好像有逻辑错误假如某日期下无人登录,该日期就会漏掉),结果为s:

SELCT DISTINCT(z.date) ad,y.c
FROM login z LEFT OUTER JOIN y
ON z.date=y.d

第四步:第三步运行结果中没有新用户登录的日期的用户登陆数为NUll,并不为零,用IF解决:

SELECT s.ad,IF(s.c IS NULL,0,s.c)
FROM s

完整代码:

SELECT s.ad date,IF(s.c IS NULL,0,s.c) new
FROM(SELECT DISTINCT(z.date) ad,y.c
     FROM login z 
     LEFT OUTER JOIN(SELECT x.d,COUNT(x.user_id) c
                     FROM(SELECT user_id,MIN(date) d
                          FROM login
                          GROUP BY user_id)x
                     GROUP BY x.d)y
     ON z.date=y.d)s
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务