SQL: Получить количество строк для значений в другом столбце, даже если эти значения не существуют - PullRequest
0 голосов
/ 23 марта 2020

У меня есть таблица с именем «products» с двумя столбцами: имя и статус. Я хотел бы получить количество строк в таблице со статусами Draft, Published и Rejected. Это запрос, который я пробовал, select count(*), status from products where status in ('Draft', 'Published') group by status;

На данный момент в таблице нет ни одной строки со статусом Published или Rejected. Таким образом, приведенный выше запрос просто возвращает одну строку со статусом и Draft вместе с ее счетом

 count | status 
-------+--------
    24 | Draft

Однако я бы хотел, чтобы результат запроса с другими состояниями равнялся нулю.

 count | status 
-------+--------
    24 | Draft
    0  | Published
    0  | Rejected

Как мне написать запрос, чтобы получить результаты, как указано выше?

1 Ответ

2 голосов
/ 23 марта 2020

Вам нужен список статусов и left join:

select v.status, count(p.status)
from (values ('Draft'), ('Published'), ('Rejected')
     ) v(status) left join
     products p
     on p.status = v.status
group by v.status;
...