题解 | #牛客每个人最近的登录日期(四)#
牛客每个人最近的登录日期(四)
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