Имея (SQL) - Having (SQL)

А ИМЕЕТ пункт в SQL указывает, что SQL ВЫБРАТЬ оператор должен возвращать только те строки, где агрегированные значения соответствуют указанным условия.

ИМЕЕТ и КУДА новичков часто путают, но они служат разным целям. КУДА учитывается на более раннем этапе выполнения запроса, фильтруя строки, прочитанные из таблиц. Если запрос содержит ГРУППА ПОданные из таблиц группируются и агрегируются. После операции агрегирования ИМЕЕТ применяется, отфильтровывая строки, не соответствующие указанным условиям. Следовательно, КУДА применяется к данным, считанным из таблиц, и ИМЕЕТ должен применяться только к агрегированным данным, которые неизвестны на начальном этапе запроса.

Чтобы просмотреть текущее состояние, сформированное ГРУППА ПО пункт, ИМЕЕТ пункт используется.[требуется разъяснение ]

Примеры

Чтобы вернуть список идентификаторов отделов, общий объем продаж которых превысил 1000 долларов США на 1 января 2000 г., а также сумму их продаж на эту дату:

ВЫБРАТЬ DeptID, СУММ(SaleAmount)ИЗ ПродажиКУДА Дата продажи = '01-Янв-2000 'ГРУППА К DeptIDИМЕЕТ СУММ(SaleAmount) > 1000

Ссылаясь на образцы таблиц в Присоединиться пример, следующий запрос вернет список отделов, в которых работает более 1 сотрудника:

ВЫБРАТЬ Название отдела, СЧИТАТЬ(*) ИЗ Наемный рабочийПРИСОЕДИНИТЬСЯ отделение НА Наемный рабочий.DepartmentID = отделение.DepartmentID ГРУППА К Название отделаИМЕЕТ СЧИТАТЬ(*)>1;

ИМЕЕТ удобно, но не обязательно. Код, эквивалентный приведенному выше примеру, но без использования ИМЕЕТ, может выглядеть так:

ВЫБРАТЬ * ИЗ (   ВЫБРАТЬ Название отдела В КАЧЕСТВЕ deptNam, СЧИТАТЬ(*) В КАЧЕСТВЕ empCnt   ИЗ Наемный рабочий В КАЧЕСТВЕ emp   ПРИСОЕДИНИТЬСЯ отделение В КАЧЕСТВЕ отдел НА emp.DepartmentID = отдел.DepartmentID   ГРУППА К deptNam) В КАЧЕСТВЕ grpКУДА grp.empCnt > 1;

внешняя ссылка