题解 | #思路#
牛客每个人最近的登录日期(四)
http://www.nowcoder.com/practice/e524dc7450234395aa21c75303a42b0a
select t1.date_1 date,count(t2.user_id) new from
(select distinct date date_1 from login order by date asc) t1
left outer join
(select user_id,min(date) date_2 from login group by user_id) t2
(select distinct date date_1 from login order by date asc) t1
left outer join
(select user_id,min(date) date_2 from login group by user_id) t2
on t1.date_1=t2.date_2 group by t1.date_1
借鉴其他大佬的思路,整理自己的错误点。这道题最开始思路不清晰,但其实只要找到所有的时间,再确定每个用户最早登陆日期,按日期字段进行连接,统计用户个数即可
写的过程中,错误点在select出现非聚合字段,却忘记group by了,其次count(user_id)写成了count(*),为什么不能用count(*)是因为我对于所有日期表左连接了用户表,即使没有user_id,也会有一条记录,造成统计错误,所以要count(user_id)才正确!注意哦!
感觉自己对于连接掌握的还不熟练,继续加油。
还有case when的使用。