Простой запрос с оператором HAVING - PullRequest
1 голос
/ 02 марта 2011

У меня есть таблица сотрудников, которая состоит из двух столбцов: Employee и DepartmentId следующим образом

|Employee  | DepartmentId
-------------------------
| e1       | 1           
| e2       | 1
| e3       | 1
| e4       | 2
| e5       | 2
| e6       | 3
| e7       | 3
| e8       | 3
| e9       | 4
| e10      | 5
| e11      | 6

Я хочу выбрать простые департаменты, в которых работают более двух сотрудников. Придумал следующее:

  SELECT Department, 
         COUNT(Employee) as Quantity
    FROM Employees
GROUP BY Department
  HAVING (Quantity > 3)
ORDER BY Department

Но во время выполнения жалуется на неверное имя столбца (Количество). Я почти уверен, что использование агрегатной функции дважды (выберите count () ... имеющее count ()) не правильно. Я что-то пропустил? постскриптум «Простое» решение, я думаю,

SELECT Department 
  FROM (SELECT Department, COUNT(Employee) AS Quantity
          FROM Employees
      GROUP BY Department)
 WHERE Quantity > 5

Ответы [ 3 ]

3 голосов
/ 02 марта 2011

Написание HAVING COUNT(*) > 3 в порядке. База данных будет оценивать выражение только один раз и повторно использовать результат как в выражениях select, так и в предложениях.

Ваш пример, когда вы выбираете значение в подзапросе, тоже подойдет (кроме того, что вам нужен псевдоним для подзапроса). Использование этой техники здесь не обязательно, но может быть полезно, если выражение более сложное, и вы хотите избежать повторения кода для удобства сопровождения.

Обратите внимание, что в MySQL запрос, который вы хотите написать, будет работать. Но это расширение, специфичное для MySQL, и тот же метод не будет работать в SQL Server.

0 голосов
/ 02 марта 2011

Я попробовал это .. следующий запрос просто отлично работает .. надеюсь, это поможет ...

ВЫБРАТЬ ОТДЕЛ ОТ СОТРУДНИКОВ ГРУППА ПО ОТДЕЛУ СЧЕТЧИК (Сотрудник)> 2;

0 голосов
/ 02 марта 2011
  SELECT Department, COUNT(Employee) AS cnt
    FROM Employees
GROUP BY Department
  HAVING COUNT(Employee) > 5

Это работает и на SQL Server.

...