繁体   English   中英

使用 SQL 中的多个列在 GROUP BY 中返回 0 个计数

[英]Return 0 counts in GROUP BY with multiple columns in SQL

我有一个 MySQL 脚本,它按城市返回每周的新用户数。 问题是它忽略了一周内没有用户的任何城市。 当那周没有用户时,我需要它返回 0。

select 
  FROM_DAYS(TO_DAYS([u.created_at:pst]) - MOD(TO_DAYS([u.created_at:pst]) -1, 7)) as week,
  a.city,
  count(u.id) as this_week_signups_to_date
from users u
left join addresses a on a.user_id = u.id
group by 
  week, city
order by 
  week DESC

任何想法我怎么能做到这一点?

也许这不是最流畅的解决方案,但您可以使用这样的交叉连接操作:

select week,
        case when joined.city = all_cities.city then this_week_signups_to_date else 0 end 
         as this_week_signups_to_date,
        all_cities.city
from
    (select 
           week([u.created_at:pst]) as week, --you could use week() in mysql or datepart() in t-sql
           a.city,
           count(u.id) as this_week_signups_to_date
     from users u
     left join addresses a on a.user_id = u.id --left/right join depends on your needs
     group by week, city) joined
cross join 
    (select distinct city from addresses) all_cities
order by week desc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM