You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL同查询用COUNT()统计多条件行数结果异常如何解决

错误原因

你原有写法的问题在于,WHERE子句会先筛选出所有房间数为12或4的共158行数据,后续的COUNT(*)是对这部分筛选后的全量数据计数,所以两个统计字段返回的都是总条数158,无法区分不同条件的计数。

正确写法

最常用的方案是条件聚合,通过CASE WHEN对每行数据做条件判断,仅统计符合对应要求的行:

SELECT
    COUNT(CASE WHEN num_of_rooms = 'twelve' THEN 1 END) AS house_with_12_rooms,
    COUNT(CASE WHEN num_of_rooms = 'four' THEN 1 END) AS house_with_4_rooms
FROM housetable
WHERE num_of_rooms IN ('twelve', 'four');

逻辑说明

COUNT函数仅会统计非NULL值,CASE WHEN不满足对应条件时会返回NULL,因此只会统计符合对应房间数的行。加上WHERE子句可以提前过滤不需要统计的行,提升查询性能。

如果你的数据库支持IF函数(比如MySQL),还可以写得更简化:

SELECT
    SUM(IF(num_of_rooms = 'twelve', 1, 0)) AS house_with_12_rooms,
    SUM(IF(num_of_rooms = 'four', 1, 0)) AS house_with_4_rooms
FROM housetable
WHERE num_of_rooms IN ('twelve', 'four');

执行上述语句后,会返回house_with_12_rooms = 157、house_with_4_rooms = 1的正确结果。


内容的提问来源于stack exchange,提问作者Uriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:45:03