SQL: предложение HAVING

Предложение HAVING используется в комбинации с предложением GROUP BY. Оно может быть использовано в операторе SELECT для фильтрации записей возвращемых предложением GROUP BY.

Синтаксис предложения HAVING

SELECT column1, column2,.. . column_n, aggregate_function(expression)
  FROM TABLES
 WHERE predicates
 GROUP BY column1, column2,.. . column_n
HAVING condition1 .. . condition_n;

aggregate_function может быть функцией подобной SUM, COUNT, MIN, или MAX.

Пример использования функции SUM
Например, вы можете использовать функцию SUM для поиска названия отдела и суммы продаж (для соответствующих отделов). Предложение HAVING может выбрать только те отделы продажи которых больше $1000.

SELECT department, SUM(sales) AS "Total sales"
  FROM order_details
 GROUP BY department
HAVING SUM(sales) > 1000;

Пример использования функции COUNT
Например, вы можете использовать функцию COUNT для выборки имени отдела и количество сотрудников (в соответствующем отделе) которые заработали более $25000 в год. Предложение HAVING отберет только те отделы, где таких работников более 10.

SELECT department, COUNT(*) AS "Number of employees"
  FROM employees
 WHERE salary > 25000
 GROUP BY department HAVING COUNT(*) > 10;

Пример использования функции MIN
Например, вы можете использовать функцию MIN для возврата названия отдела и минимальный доход этого отдела. Предложение HAVING вернет только те отделы у которых размер выручки начинается с $35000.

SELECT department, MIN(salary) AS "Lowest salary"
  FROM employees
 GROUP BY department
HAVING MIN(salary) = 35000;

Пример использования функции MAX
Например, вы также можете использовать функцию для выборки имени отдела и максимальногй выручки отдела. Предложение HAVING вернет только те отделы, чей максимальный доход менее $50000.

SELECT department, MAX(salary) AS "Highest salary"
  FROM employees
 GROUP BY department
HAVING MAX(salary) < 50000;

Один комментарий на “SQL: предложение HAVING”

  1. Максим:

    В примере «Пример использования функции MIN», в последней строке кода есть ошибка, судя по всему должно быть HAVING MIN(salary) >= 35000;

Оставить комментарий