SQL:获取另一列中值的行数,即使这些值不存在

SQL: Get count of rows for values in another column even when those values do not exist

我有一个名为 'products' 的 table,有两列:名称和状态。 我想获取 table 中状态为 DraftPublishedRejected 的行数。 这是我试过的查询, select count(*), status from products where status in ('Draft', 'Published') group by status;

目前 table 没有任何状态为 PublishedRejected 的行。 所以上面的查询只是 returns 一行状态和 Draft 及其计数

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

但是,我想将其他状态的查询结果设为零。

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

我应该如何编写查询才能得到如上的结果?

您需要一个状态列表和一个 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;