SQL:获取另一列中值的行数,即使这些值不存在
SQL: Get count of rows for values in another column even when those values do not exist
我有一个名为 'products' 的 table,有两列:名称和状态。
我想获取 table 中状态为 Draft
、Published
和 Rejected
的行数。
这是我试过的查询,
select count(*), status from products where status in ('Draft', 'Published') group by status;
目前 table 没有任何状态为 Published
或 Rejected
的行。
所以上面的查询只是 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;
我有一个名为 'products' 的 table,有两列:名称和状态。
我想获取 table 中状态为 Draft
、Published
和 Rejected
的行数。
这是我试过的查询,
select count(*), status from products where status in ('Draft', 'Published') group by status;
目前 table 没有任何状态为 Published
或 Rejected
的行。
所以上面的查询只是 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;