Как я могу выбрать группы в запросе с более чем одним элементом в них? - PullRequest
2 голосов
/ 18 июля 2011

Я довольно новичок в SQL, и я пытаюсь сделать что-то вроде этого:

У меня есть таблица с именем Foo с двумя столбцами в ней: FooId (первичный ключ) и BarId (внешний ключ без значения NULL, в котором могут быть повторяющиеся значения).

Я хочу написать запрос, который возвращает BarId, которые появляются только один раз в Foo. Я также хочу написать другой запрос, который возвращает BarId s, которые появляются более чем один раз в 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 ]

5 голосов
/ 18 июля 2011

При использовании с агрегатами, вам нужно использовать предложение HAVING вместо предложения WHERE:

SELECT
    BarId,
    COUNT(BarId) AS "BarCount"
    FROM [Database].[dbo].[Foo]
    GROUP BY BarId
    HAVING COUNT(BarID) > 1
0 голосов
/ 18 июля 2011

Вам необходимо использовать предложение HAVING. Это похоже на WHERE для агрегатных функций. См. Этот обзор.

...