在WHERE SQL语句中计数
我的表格由3列组成;id、状态、CarColor和超过100万行。 我想退回所有黑人车比白人车多的州 我试过:在WHERE SQL语句中计数,sql,count,having-clause,Sql,Count,Having Clause,我的表格由3列组成;id、状态、CarColor和超过100万行。 我想退回所有黑人车比白人车多的州 我试过: SELECT state FROM table WHERE state IN (SELECT state FROM table WHERE COUNT(carColour = 'Black') > COUNT(carColour = 'White')) GROUP BY state 但显然where语句中的coun
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')
你想
拥有而不是在哪里它是什么类型的数据库?SQL server?甲骨文?第一个有效。即使我使用sqlite,过滤器也似乎不起作用。谢谢@花椰菜:您需要SQLite 3.30.0作为过滤器
子句。。。