SQL条件统计查询结果与预期不符问题求助
SQL查询问题解决方案
你当前的写法存在两个核心问题:
- 你添加的
WHERE条件是恒成立的:任何一行的PersonID和StoreID的取值状态必然符合「PersonID为空、StoreID为空、两者都不为空」三者之一,相当于没有设置任何过滤规则,你观察到的计数变化大概率是对比的基准查询逻辑不一致导致的。 - 现有写法没有实现第三个统计项
StoreWithContact的计算。
你需要的三个统计值都是基于全表的不同维度计数,不需要设置行过滤条件,使用条件聚合的写法就能一次性得到所有正确结果:
SELECT COUNT(StoreID) AS Stores, COUNT(PersonID) AS Persons, COUNT(CASE WHEN PersonID IS NOT NULL AND StoreID IS NOT NULL THEN 1 END) AS StoreWithContact FROM Sales.Customer
逻辑说明
COUNT(字段名)本身就会自动忽略该字段为NULL的行,因此COUNT(StoreID)直接返回全表中StoreID非空的记录数,和你需要的统计规则完全一致,不需要额外加条件限制。- 第三个统计项通过CASE语句做判断:只有当
PersonID和StoreID同时非空时才返回非NULL值,COUNT统计时会自动忽略不符合条件的NULL值,最终得到的就是两者同时非空的记录数。 - 所有统计都是基于全表原始数据计算,不会出现过滤条件影响计数范围的问题。
内容的提问来源于stack exchange,提问作者ordinaryprogrammer
相关产品推荐
相关产品推荐

