SQL:即使其他值不存在,也获取另一列中的值的行数

问题描述 投票:0回答:1

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

目前该表没有任何行,其状态为PublishedRejected。因此,以上查询仅返回状态为Draft的行以及其计数

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

但是,我希望查询结果的其他状态为零。

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

我应该如何编写查询,以便获得如上所述的结果?

sql postgresql postgresql-9.5
1个回答
1
投票

您需要状态列表和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;
© www.soinside.com 2019 - 2024. All rights reserved.