Что такое агрегатные функции? Назовите 3 примера.
Агрегатные функции (англ. Aggregate Functions) в SQL — это функции, которые применяются к набору строк (группе значений) и возвращают одно итоговое значение. Они часто используются в сочетании с оператором GROUP BY для получения статистической или сводной информации о данных. Эти функции позволяют производить вычисления над наборами данных — например, подсчитывать количество записей, вычислять суммы, средние значения, минимумы и максимумы.
Основные характеристики агрегатных функций
-
Работают с несколькими строками и возвращают одно значение.
-
Часто применяются в аналитических, отчетных и статистических задачах.
-
Могут использоваться как с GROUP BY, так и без него.
-
Игнорируют значения NULL (кроме COUNT(*)).
-
Могут применяться к одному столбцу или выражению.
Список распространённых агрегатных функций
Название | Описание |
---|---|
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-запросов.