Возврат 0 отсчетов в GROUP BY с несколькими столбцами в SQL - PullRequest
0 голосов
/ 19 марта 2020

У меня есть скрипт 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

Есть идеи, как мне это сделать?

1 Ответ

1 голос
/ 19 марта 2020

Возможно, это не самое гладкое решение, но вы можете использовать операцию перекрестного соединения, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...