Что такое агрегатные функции? Назовите 3 примера.

Агрегатные функции (англ. Aggregate Functions) в SQL — это функции, которые применяются к набору строк (группе значений) и возвращают одно итоговое значение. Они часто используются в сочетании с оператором GROUP BY для получения статистической или сводной информации о данных. Эти функции позволяют производить вычисления над наборами данных — например, подсчитывать количество записей, вычислять суммы, средние значения, минимумы и максимумы.

Основные характеристики агрегатных функций

  1. Работают с несколькими строками и возвращают одно значение.

  2. Часто применяются в аналитических, отчетных и статистических задачах.

  3. Могут использоваться как с GROUP BY, так и без него.

  4. Игнорируют значения NULL (кроме COUNT(*)).

  5. Могут применяться к одному столбцу или выражению.

Список распространённых агрегатных функций

Название Описание
COUNT() Подсчитывает количество строк
--- ---
SUM() Суммирует числовые значения
--- ---
AVG() Вычисляет среднее арифметическое
--- ---
MIN() Находит минимальное значение
--- ---
MAX() Находит максимальное значение
--- ---
GROUP_CONCAT() Объединяет значения в одну строку (в некоторых СУБД, например, MySQL)
--- ---
VARIANCE(), STDDEV() Статистические функции дисперсии и стандартного отклонения (поддерживаются не во всех СУБД)
--- ---

Пример 1: COUNT() — подсчёт количества строк

SELECT COUNT(\*) AS TotalEmployees
FROM Employees;

Выводит общее количество записей в таблице Employees.

Если указать конкретный столбец:

SELECT COUNT(Department) FROM Employees;

Функция посчитает количество ненулевых значений в столбце Department.

Пример 2: SUM() — сумма значений

SELECT SUM(Salary) AS TotalSalaries
FROM Employees;

Возвращает общую сумму зарплат всех сотрудников.

Пример 3: AVG() — среднее значение

SELECT AVG(Salary) AS AverageSalary
FROM Employees;

Выводит среднюю зарплату по всем строкам.

Использование агрегатных функций с GROUP BY

SELECT Department, AVG(Salary) AS AvgDeptSalary
FROM Employees
GROUP BY Department;

В данном случае:

  • строки группируются по отделам;

  • для каждой группы рассчитывается средняя зарплата.

Обработка NULL в агрегатных функциях

  • COUNT(*) считает все строки, включая те, где значения NULL.

  • COUNT(column_name) игнорирует строки, в которых значение столбца NULL.

  • SUM() и AVG() также игнорируют NULL.

SELECT COUNT(\*) AS AllRows, COUNT(Bonus) AS NonNullBonuses
FROM Salaries;

Использование с HAVING

Агрегатные функции можно фильтровать с помощью HAVING, а не WHERE, потому что WHERE применяется до группировки, а HAVING — после.

SELECT Department, COUNT(\*) AS EmpCount
FROM Employees
GROUP BY Department
HAVING COUNT(\*) > 10;  

Выводит только те отделы, в которых больше 10 сотрудников.

Комбинирование агрегатных функций

Можно использовать несколько агрегатных функций в одном запросе:

SELECT
COUNT(\*) AS Total,
SUM(Salary) AS TotalSalary,
AVG(Salary) AS AverageSalary,
MIN(Salary) AS MinSalary,
MAX(Salary) AS MaxSalary
FROM Employees;

Примеры использования в реальных задачах

Анализ продаж:

SELECT ProductID, SUM(Amount) AS TotalSold
FROM Sales
GROUP BY ProductID;

Отчёт по заказам:

SELECT CustomerID, COUNT(OrderID) AS OrdersCount
FROM Orders
GROUP BY CustomerID
HAVING COUNT(OrderID) > 5;

Средний рейтинг продукта:

SELECT ProductID, AVG(Rating) AS AvgRating
FROM Reviews
GROUP BY ProductID;

Агрегатные функции являются мощным инструментом для анализа и сводки данных, позволяя эффективно агрегировать большие объёмы информации и извлекать ключевые метрики в рамках SQL-запросов.