Агрегатные функции SQL
Агрегатные функции SQL используются для выполнения вычислений над набором строк и возврата одного значения. Эти функции удобны, когда необходимо обобщить, проанализировать или сгруппировать большие наборы данных в базах данных SQL. Независимо от того, работаете ли вы с данными о продажах, записями о сотрудниках или запасами товаров, агрегатные функции помогают получить полезную информацию.
Они часто используются с оператором GROUP BY
в SQL для обобщения данных по каждой группе. К часто используемым агрегатным функциям относятся COUNT()
, SUM()
, AVG()
, MIN()
и MAX()
.
Что такое агрегатные функции SQL
Агрегатные функции SQL используются для выполнения вычислений над несколькими строками данных и возвращения одного обобщённого результата. Эти функции обычно используются с оператором GROUP BY
для организации данных в группы, в которых мы затем можем выполнять вычисления, такие как суммирование, усреднение или подсчёт. Агрегатные функции позволяют осмыслить большие наборы данных, сводя их в осмысленные сводки.
Часто используемые агрегатные функции SQL
COUNT()
SQL функция COUNT()
возвращает количество строк, соответствующих заданному условию или присутствующих в столбце.
COUNT(*)
: Подсчитывает все строки.COUNT(column_name)
: Подсчитывает значения, отличные отNULL
, в указанном столбце.COUNT(DISTINCT column_name)
: Подсчитывает уникальные значения, отличные отNULL
, в столбце.
Примеры:
-- Общее количество записей в таблице
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()
вычисляет общую сумму числового столбца.
SUM(column_name)
: возвращает общую сумму всех значений, отличных отNULL
, в столбце.
Примеры:
-- Расчёт общей суммы заработной платы
SELECT SUM(Salary) AS TotalSalary FROM Employee;
-- Расчёт суммы уникальных заработных плат
SELECT SUM(DISTINCT Salary) AS DistinctSalarySum FROM Employee;
AVG()
SQL функция AVG()
вычисляет среднее значение числового столбца. Она делит сумму столбца на количество строк, не содержащих NULL
.
AVG(column_name)
: Возвращает среднее значение значений, не содержащихNULL
, в столбце.
Примеры:
-- Расчёт средней зарплаты
SELECT AVG(Salary) AS AverageSalary FROM Employee;
-- Среднее значение уникальных зарплат
SELECT AVG(DISTINCT Salary) AS DistinctAvgSalary FROM Employee;
MIN()
и MAX()
SQL функции MIN()
и MAX()
возвращают соответственно наименьшее и наибольшее значения из столбца.
MIN(column_name)
: возвращает наименьшее значение.MAX(column_name)
: возвращает наибольшее значение.
Примеры:
-- Поиск самой высокой зарплаты
SELECT MAX(Salary) AS HighestSalary FROM Employee;
-- Поиск самой низкой зарплаты
SELECT MIN(Salary) AS LowestSalary FROM Employee;
Примеры агрегатных функций SQL
Рассмотрим демонстрационную таблицу Employee
для иллюстрации агрегатных функций SQL. Эта таблица содержит данные о сотрудниках, такие как их Id
, Name
и Salary
.
Id | Name | Salary |
---|---|---|
1 | A | 802 |
2 | B | 403 |
3 | C | 604 |
4 | D | 705 |
5 | E | 606 |
6 | F | NULL |
Подсчёт общего количества сотрудников:
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-запросов.