已知数据

登录表 login 字段: id user_id client_id date

条件:

显示日期

显示新用户个数

查询结果按照日期升序排序

未知量:

牛客每个日期登录新用户个数

思考:

已知数据和未知量的关系, 按日期分组,统计该日期的新用户个数。

什么是新用户:第一次登录的用户

什么是第一次登录?按用户分组,找出时间最小的日期。

步骤,先找出用户第一次登录的时间和用户名。

再按时间分组,统计用户数量。

需要用到的方法:子查询。

select date , count(user_id) new 
from 
(select user_id, min(date) date 
from login 
group by user_id
) sub 
group by date 
order by date 

这个代码解决了有用户登录的日期,但不解决无用户登录的日期为0。

我们需要无重复的日期和子查询里的表格合并。

alt

代码方案

select a.date, count(b.user_id) new 
from (select distinct date from login) a 
left join (select user_id, min(date) first_date from login group by user_id) b
on a.date = b.first_date 
group by a.date 
order by a.date 

回顾

这个题使用了子查询和表链接。

使用子表提取数据,使用表链接链接两个子表。