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')
我的 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')