已知数据
登录表 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。
我们需要无重复的日期和子查询里的表格合并。
代码方案
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
回顾
这个题使用了子查询和表链接。
使用子表提取数据,使用表链接链接两个子表。

京公网安备 11010502036488号