Postgres SELECT COUNT(*) + GROUP BY не выводит если 0 строк

Рейтинг: 1Ответов: 2Опубликовано: 19.04.2015
CREATE TABLE items
(
  id serial NOT NULL,
  user_id integer NOT NULL,
  status smallint
);

CREATE TABLE phones
(
  phone character varying,
  users integer[]
);

Есть запрос:

SELECT  phones.phone, COUNT(*) AS "count"
FROM phones,items 
WHERE phones.phone = '8985545444' AND items.user_id = ALL (phones.users) AND items.status = 1 
GROUP BY phones.phone;

Если номер: 7924445588 - получаем:

   phone    | count
------------+-------
 7924445588 |     3

Если номер: 8985545444 - получаем пустоту:

 phone | count
-------+-------

Нужно чтобы было:

   phone    | count 
------------+-------
 8985545444 |     0

Как этого добиться?

Ответы

▲ 1

Попробуйте так:

SELECT
  phones.phone,
  coalesce(COUNT(*), 0)  AS "count"
FROM
  phones,
  items
WHERE
  phones.phone = '8985545444'
  AND items.user_id = ALL (phones.users)
  AND items.status = 1
GROUP BY
  phones.phone;
▲ 1

Вам необходимо использовать LEFT JOIN и считать только записи из таблицы items:

SELECT phones.phone, COUNT(items.*) AS "count"
FROM phones
LEFT JOIN items on items.user_id = ALL (phones.users) and items.status = 1
WHERE phones.phone = '8985545444'
GROUP BY phones.phone;