Агрегатные функции SQL

В статье мы рассмотрим наиболее часто используемые агрегатные функции SQL, их синтаксис, практические примеры и способы оптимального использования в запросах.

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

Они часто используются с оператором GROUP BY в SQL для обобщения данных по каждой группе. К часто используемым агрегатным функциям относятся COUNT(), SUM(), AVG(), MIN() и MAX().

Что такое агрегатные функции SQL

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

Часто используемые агрегатные функции SQL

COUNT()

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

Примеры:

-- Общее количество записей в таблице
SELECT COUNT(*) AS TotalRecords FROM Employee;

-- Количество зарплат, не равных NULL
SELECT COUNT(Salary) AS NonNullSalaries FROM Employee;

-- Количество уникальных зарплат, не равных NULL
SELECT COUNT(DISTINCT Salary) AS UniqueSalaries FROM Employee;

SUM()

SQL функция SUM() вычисляет общую сумму числового столбца.

Примеры:

-- Расчёт общей суммы заработной платы
SELECT SUM(Salary) AS TotalSalary FROM Employee;

-- Расчёт суммы уникальных заработных плат
SELECT SUM(DISTINCT Salary) AS DistinctSalarySum FROM Employee;

AVG()

SQL функция AVG() вычисляет среднее значение числового столбца. Она делит сумму столбца на количество строк, не содержащих NULL.

Примеры:

-- Расчёт средней зарплаты
SELECT AVG(Salary) AS AverageSalary FROM Employee;

-- Среднее значение уникальных зарплат
SELECT AVG(DISTINCT Salary) AS DistinctAvgSalary FROM Employee;

MIN() и MAX()

SQL функции MIN() и MAX() возвращают соответственно наименьшее и наибольшее значения из столбца.

Примеры:

-- Поиск самой высокой зарплаты
SELECT MAX(Salary) AS HighestSalary FROM Employee;

-- Поиск самой низкой зарплаты
SELECT MIN(Salary) AS LowestSalary FROM Employee;

Примеры агрегатных функций SQL

Рассмотрим демонстрационную таблицу Employee для иллюстрации агрегатных функций SQL. Эта таблица содержит данные о сотрудниках, такие как их Id, Name и Salary.

IdNameSalary
1A802
2B403
3C604
4D705
5E606
6FNULL

Подсчёт общего количества сотрудников:

SELECT COUNT(*) AS TotalEmployees FROM Employee;
┌────────────────┐
│ TotalEmployees │
├────────────────┤
│ 6 │
└────────────────┘

Расчёт общей заработной платы:

SELECT SUM(Salary) AS TotalSalary FROM Employee;
┌─────────────┐
│ TotalSalary │
├─────────────┤
│ 3120 │
└─────────────┘

Поиск средней заработной платы:

SELECT AVG(Salary) AS AverageSalary FROM Employee;
┌───────────────┐
│ AverageSalary │
├───────────────┤
│ 624.0 │
└───────────────┘

Поиск самой высокой и самой низкой заработной платы:

SELECT MAX(Salary) AS HighestSalary, MIN(Salary) AS LowestSalary FROM Employee;
┌───────────────┬──────────────┐
│ HighestSalary │ LowestSalary │
├───────────────┼──────────────┤
│ 802 │ 403 │
└───────────────┴──────────────┘

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

GROUP BY позволяет группировать строки, имеющие одинаковые значения в определённых столбцах. Затем к этим группам можно применить агрегатные функции, что помогает обобщить данные для каждой группы. Обычно для этого используются функции COUNT(), SUM(), AVG(), MIN() и MAX().

Пример: Общая заработная плата каждого сотрудника

SELECT Name, SUM(Salary) AS TotalSalary
FROM Employee
GROUP BY Name;
┌──────┬─────────────┐
│ Name │ TotalSalary │
├──────┼─────────────┤
│ A │ 802 │
│ B │ 403 │
│ C │ 604 │
│ D │ 705 │
│ E │ 606 │
│ F │ NULL │
└──────┴─────────────┘

Использование HAVING с агрегатными функциями

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

Пример: Поиск сотрудников с заработной платой выше 600

SELECT Name, SUM(Salary) AS TotalSalary
FROM Employee
GROUP BY Name
HAVING SUM(Salary) > 600;
┌──────┬─────────────┐
│ Name │ TotalSalary │
├──────┼─────────────┤
│ A │ 802 │
│ C │ 604 │
│ D │ 705 │
│ E │ 606 │
└──────┴─────────────┘

Часто задаваемые вопросы

Что такое агрегатные функции в SQL?

Агрегатные функции — это функции, выполняющие вычисления над набором строк и возвращающие одно итоговое значение. Например: COUNT(), SUM(), AVG(), MIN(), MAX().

Какие агрегатные функции чаще всего используются?

Наиболее популярные функции: COUNT() (подсчёт), SUM() (сумма), AVG() (среднее), MIN() и MAX() (минимум и максимум).

Чем отличается COUNT(*) от COUNT(column)?

COUNT(*) считает все строки, включая те, где значения могут быть NULL. COUNT(column) исключает строки с NULL в указанном столбце.

Можно ли использовать агрегатные функции без GROUP BY?

Да, агрегатные функции можно применять и без GROUP BY — они тогда работают по всей таблице.

Когда использовать HAVING вместо WHERE?

HAVING применяется после группировки — для фильтрации результатов агрегатных функций. WHERE используется до группировки и фильтрует отдельные строки.

Заключение

Агрегатные функции SQL являются основными инструментами для обобщения больших наборов данных. Независимо от того, вычисляете ли вы суммы, средние значения или находите максимальные и минимальные значения, агрегатные функции позволяют быстро выполнять сложные вычисления над данными. Освоив эти функции, можно получить ценную информацию, выявить тенденции и провести глубокий анализ любого набора данных. Попрактиковавшись, вы сможете использовать эти функции вместе с GROUP BY, HAVING и другими выражениями для создания мощных и эффективных SQL-запросов.

Комментарии


Дополнительные материалы

Предыдущая Статья

Зачем нужны логические свойства CSS