Подсчет строк с разными условиями в одном запросе - PullRequest
0 голосов
/ 14 января 2019

Допустим, у меня есть эта таблица:

 id | status | type
----+--------+----------
  1 | new    | car
  2 | new    | boat
  3 | used   | car
  4 | new    | car

и я хотел посчитать все new машины и количество cars за один раз, как это сделать?

Я пробовал это:

SELECT COUNT(status='new'), COUNT(type='car') FROM table;

, но это всегда считается до 4 (общее количество строк). Единственное, о чем я могу думать, это использовать CASE внутри COUNT, но есть ли более чистый способ?

1 Ответ

0 голосов
/ 14 января 2019

Вы можете использовать FILTER для выполнения условного агрегирования:

SELECT COUNT(*) FILTER(WHERE status='new'), COUNT(*) FILTER(WHERE type='car')
FROM tab;

В качестве альтернативы SUM:

SELECT SUM((status='new')::int), SUM((type='car')::int) FROM table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...