Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WHERE SQL语句中计数_Sql_Count_Having Clause - Fatal编程技术网

在WHERE SQL语句中计数

在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

我的表格由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语句中的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作为
过滤器
子句。。。