Having (SQL)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

HAVING — необязательный (опциональный) параметр оператора SELECT для указания условия на результат агрегатных функций (MAX, SUM, AVG, …).

HAVING <условия> аналогичен WHERE <условия> за исключением того, что строки отбираются не по значениям столбцов, а строятся из значений столбцов, указанных в GROUP BY, и значений агрегатных функций, вычисленных для каждой группы, образованной GROUP BY.

Необходимо, чтобы в SELECT были заданы только требуемые в выходном потоке столбцы, перечисленные в GROUP BY и/или агрегированные значения. Распространённая ошибка — указание в SELECT столбца, пропущенного в GROUP BY.

Если параметр GROUP BY в SELECT не задан, HAVING применяется к «группе» всех строк таблицы, полностью дублируя WHERE (допускается не во всех реализациях стандарта SQL).

Примеры[править | править вики-текст]

Возвращает список идентификаторов отделов, продажи которых превысили 1000 долларов за 1 января 2000 года, вместе с суммами продаж за этот день:

 SELECT DeptID, SUM(SaleAmount) FROM Sales
  WHERE SaleDate = '01-Jan-2000'
  GROUP BY DeptID
  HAVING SUM(SaleAmount) > 1000

Следующий запрос вернет список отделов, в которых работает более одного сотрудника:

 SELECT DepartmentName, COUNT(*) 
  FROM employee, department 
  WHERE employee.DepartmentID = department.DepartmentID 
  GROUP BY DepartmentName
  HAVING COUNT(*) > 1;

Ссылки[править | править вики-текст]