我对SQL很陌生,我正在尝试这样做:
我有一个名为Foo
的表格,其中有两列:FooId
(主键)和BarId
(可以在其中包含重复值的非可空外键)
我想编写一个返回仅在BarId
中出现一次的Foo
的查询。我还想编写另一个查询,该查询返回在BarId
中出现多次的Foo
。
我从这样的事情开始:
SELECT
BarId,
COUNT(BarId) AS "BarCount"
FROM [Database].[dbo].[Foo]
GROUP BY BarId
返回每个BarId
的出现次数。但是一旦我尝试添加WHERE
子句,我就会收到语法错误:
SELECT
BarId,
COUNT(BarId) AS "BarCount"
FROM [Database].[dbo].[Foo]
GROUP BY BarId
WHERE "BarCount" > 1
我确信这是一个愚蠢的错误,我正在通过不了解SQL非常好。我做错了什么?
答案 0 :(得分:5)
与聚合一起使用时,您需要使用HAVING
子句而不是WHERE
子句:
SELECT
BarId,
COUNT(BarId) AS "BarCount"
FROM [Database].[dbo].[Foo]
GROUP BY BarId
HAVING COUNT(BarID) > 1
答案 1 :(得分:0)
您需要使用HAVING
子句。它就像聚合函数的WHERE
一样。见This overview.