我有一个名为'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
我应该如何编写查询,以便获得如上所述的结果?
您需要状态列表和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;