Имея (SQL)
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2024 г. ) |
А HAVING
Предложение в SQL указывает, что SQL SELECT
Оператор должен возвращать только те строки, где совокупные значения соответствуют указанным условиям . [1] : 125–127
Использовать
[ редактировать ]HAVING
и WHERE
новички часто путают их, но они служат разным целям. WHERE
учитывается на более раннем этапе выполнения запроса, фильтруя считанные из таблиц строки. Если запрос содержит GROUP BY
, строки из таблиц группируются и агрегируются. После операции суммирования HAVING
применяется, отфильтровывая строки, не соответствующие указанным условиям. Поэтому, WHERE
применяется к данным, считанным из таблиц, и HAVING
следует применять только к агрегированным данным, которые неизвестны на начальном этапе запроса.
Чтобы просмотреть текущее состояние, сформированное GROUP BY
пункт, HAVING
используется оговорка. [ нужны разъяснения ]
Примеры
[ редактировать ]Чтобы вернуть список идентификаторов отделов, общий объем продаж которых превысил 1000 долларов США на дату 1 января 2000 г., а также сумму их продаж на эту дату:
SELECT DeptID, SUM(SaleAmount)
FROM Sales
WHERE SaleDate = '2000-01-01'
GROUP BY DeptID
HAVING SUM(SaleAmount) > 1000
Ссылаясь на примеры таблиц в объединения примере , следующий запрос вернет список отделов, в которых работает более 1 сотрудника:
SELECT DepartmentName, COUNT(*)
FROM Employee
JOIN Department ON Employee.DepartmentID = Department.DepartmentID
GROUP BY DepartmentName
HAVING COUNT(*) > 1;
HAVING
удобно, но не обязательно. Код, эквивалентный приведенному выше примеру, но без использования HAVING
, может выглядеть так:
SELECT * FROM (
SELECT DepartmentName AS deptNam, COUNT(*) AS empCount
FROM Employee AS emp
JOIN Department AS dept ON emp.DepartmentID = dept.DepartmentID
GROUP BY deptNam
) AS grp
WHERE grp.empCount > 1;
Ссылки
[ редактировать ]- ^ Документация PostgreSQL 16.1 (PDF) . Группа глобального развития PostgreSQL. 2023 . Проверено 8 февраля 2024 г.
Внешние ссылки
[ редактировать ]- Предложения HAVING и GROUP BY SQL. Архивировано 3 июня 2011 г. на Wayback Machine.
- Агрегатные функции SQL. Архивировано 3 мая 2017 г. на Wayback Machine.