SQL 69) 查询每个日期登录新用户个数

牛客每个人最近的登录日期(四)

http://www.nowcoder.com/questionTerminal/e524dc7450234395aa21c75303a42b0a

方法)
一开始是这样写的

SELECT date, COUNT(user_id)
FROM login
WHERE (date, user_id) IN(
    SELECT MIN(date), user_id
    FROM login
    GROUP BY user_id
)
GROUP BY date;

但没办法通过,因为无法输出没有新用户登录的日期

  • 因此要外连结一个完整的login作为主表
    SELECT l.date, IFNULL(a.new_num, 0)
    FROM login as l
    LEFT JOIN( 
      SELECT date, COUNT(user_id) AS new_num
      FROM login
      WHERE (date, user_id) IN(
      SELECT MIN(date), user_id
      FROM login
      GROUP BY user_id)
    GROUP BY date)a
    ON a.date = l.date
    GROUP BY l.date
    ORDER BY l.date;
  • 借鉴大神的窗口函数解法
    select a.date,
    sum(case when t_rank=1 then 1 else 0 end) new
    from 
    (select date, row_number() over(partition by user_id order by date) t_rank
    from login) a
    group by date;
SQL 文章被收录于专栏

SQL

全部评论

相关推荐

点赞 评论 收藏
分享
评论
22
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务