[英]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.