Урок 4.1: Базовые агрегатные функции в SQL
Агрегатные функции в SQL используются для выполнения вычислений над несколькими строками столбца таблицы и возвращают одно итоговое значение. Эти функции необходимы для суммирования данных, создания отчетов и проведения статистического анализа. В этом уроке рассмотрены самые распространённые агрегатные функции с практическими примерами на базе данных Sakila.
Основные агрегатные функции
COUNT() — Считает количество строк
Синтаксис:
COUNT(expression)
Пример:
SELECT COUNT(*) AS total_payments
FROM payment;
Результат: Возвращает общее количество строк в таблице payment.
COUNT(column) и COUNT(*)
Эти две формы похожи, но работают по-разному:
COUNT(*)считает все строки в результирующем наборе;COUNT(column)считает только строки, гдеcolumnимеет значение NOT NULL.
Поэтому, если в столбце есть NULL, результат COUNT(column) может быть меньше, чем COUNT(*).
Пример (Sakila):
SELECT
COUNT(*) AS total_rentals,
COUNT(return_date) AS returned_rentals
FROM rental;
Пояснение:
total_rentalsсчитает все строки таблицыrental;returned_rentalsсчитает только строки, гдеreturn_dateзаполнен;- для невозвращённых аренд
return_date = NULL, поэтому они не попадают вCOUNT(return_date).
SUM() — Вычисляет сумму значений
Синтаксис:
SUM(expression)
Пример:
SELECT SUM(amount) AS total_amount
FROM payment;
Результат: Возвращает сумму значений столбца amount.
Комментарий: функция SUM(amount) игнорирует NULL. Если все значения в выборке NULL, результатом будет NULL.
AVG() — Вычисляет среднее значение
Синтаксис:
AVG(expression)
Пример:
SELECT AVG(amount) AS average_amount
FROM payment;
Результат: Возвращает среднее значение столбца amount.
Комментарий: функция AVG(amount) учитывает в среднем только строки, где amount не NULL.
Если нужно включить строки с NULL в количество строк (знаменатель), используйте один из вариантов:
SELECT
AVG(amount) AS avg_ignore_null,
AVG(COALESCE(amount, 0)) AS avg_include_null_as_zero,
SUM(amount) / COUNT(*) AS avg_sum_div_all_rows
FROM payment;
Пояснение:
avg_ignore_null— стандартное поведениеAVG,NULLне учитываются;avg_include_null_as_zero—NULLзаменяются на0, и все строки попадают в расчет;avg_sum_div_all_rows— сумма делится на общее число строкCOUNT(*), что также включает строки сNULLв знаменатель.
MAX() — Находит максимальное значение
Синтаксис:
MAX(expression)
Пример:
SELECT MAX(amount) AS max_amount
FROM payment;
Результат: Возвращает наибольшее значение в столбце amount.
Комментарий: функция MAX(amount) игнорирует NULL. Если все значения NULL, результатом будет NULL.
MIN() — Находит минимальное значение
Синтаксис:
MIN(expression)
Пример:
SELECT MIN(amount) AS min_amount
FROM payment;
Результат: Возвращает наименьшее значение в столбце amount.
Комментарий: функция MIN(amount) игнорирует NULL. Если все значения NULL, результатом будет NULL.
MIN(column) и ORDER BY column LIMIT 1 — всегда ли одно и то же?
Не всегда.
Сравним:
SELECT MIN(column_name) FROM table_name;
SELECT column_name FROM table_name ORDER BY column_name LIMIT 1;
MIN(column_name)игнорируетNULLи ищет минимум среди не-NULLзначений;ORDER BY column_name LIMIT 1возвращает первую строку после сортировки;- если
NULLв вашей СУБД сортируется первым (например, в MySQL/MariaDB приASC), второй запрос может вернутьNULL, аMIN()при этом вернет минимальное не-NULLзначение.
Они совпадут, если:
- в столбце нет
NULL; - или
NULLсортируется последним; - или вы явно исключили
NULL.
Надежный вариант, эквивалентный MIN():
SELECT column_name
FROM table_name
WHERE column_name IS NOT NULL
ORDER BY column_name
LIMIT 1;
Практическое применение
- Подсчет количества клиентов:
Используйте
COUNT(*), чтобы узнать, сколько клиентов в базе данных.SELECT COUNT(*) AS total_customers FROM customer; - Вычисление общей суммы продаж по сотрудникам:
Используйте
SUM(amount)сGROUP BY staff_id, чтобы увидеть продажи по каждому сотруднику.SELECT staff_id, SUM(amount) AS staff_total FROM payment GROUP BY staff_id; - Нахождение среднего платежа по клиенту:
Используйте
AVG(amount)сGROUP BY customer_id.SELECT customer_id, AVG(amount) AS avg_payment FROM payment GROUP BY customer_id;
Основные выводы из этого урока
Агрегатные функции SQL — мощный инструмент для анализа и обобщения данных. Освоив COUNT, SUM, AVG, MIN и MAX, вы сможете создавать информативные отчеты и получать ценные инсайты из вашей базы данных. Практикуйтесь с этими функциями на примерах из базы Sakila для закрепления навыков.