如何在查询中选择包含多个项目的组?

时间:2011-07-18 13:46:45

标签: sql tsql count group-by

我对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非常好。我做错了什么?

2 个答案:

答案 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.