Возвращает нулевое значение как '0' в выражении group by, postgresql - PullRequest
4 голосов
/ 18 апреля 2011

Я использую count и group by, чтобы узнать, сколько подписчиков совершают покупки каждый день:

select count(s.email) 
from subscriptions s, orders o 
where o.subcription_id=s.id 
group by s.created_at

Результаты:

created_at  count
------------------
04-04-2011  1
06-04-2011  2
07-04-2011  1
10-04-2011  5
11-04-2011  9

Однако я все еще хочу, чтобы нулевые строки возвращались как '0'. Как мне это сделать? Обратите внимание, что я должен использовать обе таблиц.

created_at  count
------------------
04-04-2011  1
05-04-2011  0
06-04-2011  2
07-04-2011  1
08-04-2011  0
09-04-2011  0
10-04-2011  5
11-04-2011  9

Ответы [ 2 ]

7 голосов
/ 18 апреля 2011
SELECT  s.created_at, COUNT(o.subsription_id)
FROM    subscriptions s
LEFT JOIN
        orders o
ON      o.subcription_id = s.id
GROUP BY
        s.created_at
2 голосов
/ 18 апреля 2011

Функция count () всегда возвращает значение (даже если оно равно нулю), проблема в том, что в одной из ваших таблиц отсутствуют соответствующие строки. Вам необходимо выполнить внешнее соединение, чтобы включить строки из обеих таблиц. Проверьте, в какой таблице отсутствуют строки, затем поместите внешнее объединение, чтобы включить все строки из другой таблицы.

SELECT s.created_at, COUNT(o.subscription_id)
FROM   subscriptions s
LEFT OUTER JOIN order o //(Depending on situation, it can be RIGHT OUTER JOIN)
ON (s.id = o.subscription_id)
GROUP BY s.created_at

Если у вас все еще есть проблемы, пожалуйста, опубликуйте данные ваших таблиц.

...