Агрегирующие функции

Агрегирующие функции Функции, обрабатывающие набор строк для подсчета и возвращения одного значения используются для получения обобщающих значений. Их можно применять ко всем строкам таблицы, строкам, определенным в предложении WHERE или к группам строк в предложении GROUP BY. В любом случае, независимо от структуры набора строк, для каждого из них получается единственное значение.

Для выполнения агрегирующих операций используются следующие функции:

  • COUNT определяет количество строк или значений поля, выбранных посредством запроса и не являющихся NULL-значениями;
  • SUM вычисляет сумму всех выбранных значений данного поля;
  • AVG вычисляет среднее значение для всех выбранных значений данного поля;
  • МАХ вычисляет наибольшее из всех выбранных значений данного поля;
  • MIN вычисляет наименьшее из всех выбранных значений данного поля.

В качестве аргументов агрегирующих функций в большинстве случаев используются названия полей таблицы, но также допускаются константы, функции и любые их комбинации с арифметическими операторами.

Общая форма агрегирующей функции имеет следующий вид:

aggregate_function (<expr>)

IDevice IconПримеры
Найти средную стоимсть услуг:

SQL:
SELECT AVG(price) FROM tbl_service

В результате выполнения запроса получим одно значение:

avg(price)
110.83

С помощью следующего оператора можно найти среднюю стоимость всех услуг в случае удвоения их цены:

SQL:
SELECT AVG(price*2) FROM tbl_service

Если в столбце, к которому применяется агрегирующая функция, имеются нулевые (NULL) значения, то они просто игнорируются.

Исключением является функция COUNT(*), которая всегда подсчитывает общее количество строк, независимо от наличия в них нулевых значений.

IDevice IconПримеры
Подсчитать количество расторгнутых договоров:

SQL:
SELECT COUNT(retire_date) FROM tbl_contract

Результат:

COUNT(retire_date)
66

Поскольку поле retire_date содержит дату расторжения договора и значение NULL в случае, если договор не был расторгнут, функция COUNT не учитывает строки, содержащие значения NULL в поле retire_date.


SQL:
SELECT COUNT(*) FROM tbl_contract

В результате выполнения данного запроса будет получено количество записей в таблице tbl_contract:

COUNT(*)
315


Для ограничения числа строк, участвующих в агрегирующих вычислениях, можно использовать предложение WHERE. В этом случае сначала выполняется предложение WHERE, в результате чего находятся все записи, удовлетворяющие заданным условиям, а затем к выбранным строкам применяются агрегирующие функции.

Если условиям запроса не удовлетворяет ни одна строка, агрегирующие функции возвращают значение NULL. Исключение составляет функции COUNT, которая возвращает нуль.

IDevice IconПример

Подсчитать количество клиентов мужского пола:

SQL:
SELECT COUNT(*) FROM tbl_clients WHERE sex='m'