我有以下查询:
select postal_code, count(postal_code) as c
from postal_codes
where postal_code in ('A0A 0A1', 'A0A 0A2', 'A0A 0A3', 'A0A 0A4', 'A0A 0B1', 'A0A 1B1', 'A0A 1B2')
group by postal_code
最后两个值在数据库中不存在(“A0A 1B1”,“A0A 1B2”),因此将不会显示它们。我希望它们以COUNT()值为0显示。
该查询将仅显示前5个计数为1的数字,但我需要全部7个,后两个计数为0。
那可能吗?
基本上,我有一个值列表(带有“WHERE IN()”),我需要检查它们是否存在于数据库中。
谢谢!
最佳答案
您可以使用VALUES
构造并执行LEFT JOIN
:
select t.postal_code, count(p.postal_code) as c
from ( values ('A0A 0A1'), ('A0A 0A2'), ('A0A 0A3'), ('A0A 0A4'), ('A0A 0B1'), ('A0A 1B1'), ('A0A 1B2')
) t(postal_code) left join
postal_codes p
on p.postal_code = t.postal_code
group by t.postal_code;
关于sql - SQL在 “WHERE IN ()”子句中显示所有带有COUNT的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52481518/