牛客登录(四)

牛客每天有很多人登录,请你统计一下牛客每个日期登录新用户个数,
有一个登录(login)记录表,简况如下:

第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网,因为是第1次登录,所以是新用户
。。。
第4行表示id为2的用户在2020-10-13使用了客户端id为2的设备登录了牛客网,因为是第2次登录,所以是老用户
。。
最后1行表示id为4的用户在2020-10-15使用了客户端id为1的设备登录了牛客网,因为是第2次登录,所以是老用户


请你写出一个sql语句查询每个日期登录新用户个数,并且查询结果按照日期升序排序,上面的例子查询结果如下:


查询结果表明:
2020-10-12,有3个新用户(id为2,3,1)登录
2020-10-13,没有新用户登录
2020-10-14,有1个新用户(id为4)登录
2020-10-15,没有新用户登录

 

错误答案:

select a.date,count(*) from
(select user_id,min(date)as date from login group by user_id)as a

group by a.date
order by a.date

正确答案:

select l.date,(select count(user_id) from
(select user_id,min(date)as min_date from login group by user_id)as a
where a.min_date=l.date) new
from login l
group by l.date
order by l.date

 

按照原错误答案,会遗漏没有用户登录的时间,因为a表中只包含min(date),而且选取date也是从a中选,无疑需要引入新列表

posted @ 2021-02-11 23:33  小千北同学超爱写代码  阅读(119)  评论(0编辑  收藏  举报