WHERE 语句中的 COUNT SQL

COUNT in a WHERE statement SQL

我的 Table 由 3 列组成; id、state、carColour 和超过 100 万行。 我想 return 所有黑车多于白车的州。

我试过:

SELECT state
FROM table
WHERE state IN (SELECT state
                FROM table
                WHERE COUNT(carColour = 'Black') > COUNT(carColour = 'White'))
GROUP BY state

但显然 where 语句中的 count() 不起作用...我该如何解决这个问题?

不需要子查询。您可以使用条件聚合在 having 子句中进行过滤:

select state
from mytable
group by state
having sum(case when carColour = 'Black' then 1 else 0 end) 
     > sum(case when carColour = 'White' then 1 else 0 end) 

这使用标准的 case 语法,几乎所有地方都支持这种语法。有些数据库有快捷方式。例如,Postgres 和 SQLite 支持 filter 子句:

having count(*) filter(where carColour = 'Black') 
     > count(*) filter(where carColour = 'White')