В блог
Агрегатные функции в SQL-запросах: что это и для чего нужны - Симулейтив

Агрегатные функции в SQL-запросах: что это и для чего нужны

Дата последнего обновления: 30.01.2026
Дата размещения: 02.05.2025
Евгений Буторин
Руководитель отдела CRM-аналитики развития клиентской базы в Альфа Банке

В мире данных часто требуется не просто извлечь информацию, но и обобщить её: посчитать общее количество записей, вычислить среднее значение или сумму этих значений, найти максимум или минимум. Именно для этого в SQL существуют агрегатные функции — специальные функции, которые обрабатывают набор значений и возвращают единственный результат для указанной группы полей.

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

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

Агрегатная функция — это операция, которая принимает множество значений (например, все числа в столбце) и возвращает одно вычисленное значение.

Основные особенности:

  1. Работают с наборами данных (столбцами или выражениями).
  2. Игнорируют NULL (кроме COUNT()).
  3. Используются вместе с GROUP BY для групповой обработки.

Без агрегатных функций пришлось бы выгружать все строки и считать вручную, что неэффективно.

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

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

  • Анализ данных (например, расчёт средних продаж или общей выручки).
  • Фильтрация (выбор групп, где сумма больше заданного значения).
  • Оптимизация (агрегация на стороне БД, а не в отчете).

Пример: вместо выгрузки всех заказов можно сразу получить их общее количество и сумму по группам товаров и месяцам.

Функция COUNT

Функция COUNT считает количество строк или не-NULL значений. Чаще всего применяется для калькуляции числа клиентов, остатков и строк при валидации таблиц.

Синтаксис:

SELECT поле (одно или несколько), COUNT(по полю) FROM table
GROUP BY поле (одно или несколько)

Если нужно просто посчитать количество строк в таблице, то синтаксис будет выглядеть упрощённым:

SELECT COUNT(*) FROM table

Примеры:

Количество заказов по месяцам:

SELECT month, COUNT(order_id) FROM orders
GROUP BY month

Количество уникальных пользователей, купивших продукт в 2024 году:

Важно: COUNT() считает все строки, включая NULL, а COUNT(column) — только не-NULL значения.

Также внутри COUNT можно использовать DISTINCT, которые уникализирует данные.

SELECT month, product, COUNT(distinct client_uk) FROM clients
WHERE month >=2024-01-01GROUP BY month, product

Функция SUM

Функция SUM суммирует значения в столбце. Обычно используется для суммирования продаж и размеров транзакций.

Синтаксис:

SELECT SUM(по полю) FROM table

Пример:

Общая выручка за 2024 год:

SELECT SUM(revenue) as total_revenue FROM sales
WHERE 1 = 1
	AND DATE >=2024-01-01AND DATE <2025-01-01

Особенности:

  • Игнорирует NULL;
  • Работает только с числами.

Функция AVG

Вычисляет среднее арифметическое значение.

Синтаксис:

SELECT AVG(по полю) FROM table

Пример:

Средний чек в магазине за 2024 год:

SELECT AVG(RUR_AMT) as avg_bill FROM transactions
WHERE 1 = 1
	AND DATE >=2024-01-01AND DATE <2025-01-01

Нюансы:

  • NULL не учитывается.
  • Для точности можно использовать CAST:
SELECT CAST(AVG(RUR_AMT) as FLOAT) as avg_bill FROM transactions
WHERE 1 = 1
	AND DATE >=2024-01-01AND DATE <2025-01-01

Функции MAX и MIN

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

Синтаксис:

SELECT MIN(по полю), MAX(по полю) from table

Пример: самый дорогой и дешевый товар:

SELECT MAX(price) as max_price, MIN(price) as min_price from items

Применение:

  • Анализ диапазонов (цена, даты, возраст);
  • Поиск экстремальных значений.

Комбинирование функций

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

Пример: статистика по заказам:

SELECT
	Period,
	COUNT(DISTINCT client_uk) as cl_dis,
	SUM(sale_flag) as sales,
	AVG(RUR_AMT) as avg_bill
FROM orders
WHERE period >=2025-01-01GROUP BY period

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

GROUP BY группирует данные перед применением агрегатных функций. То есть простыми словами, GROUP BY позволяет вам агрегировать данные по определённому значению поля.

Например, у вас есть три вида фруктов (бананы, яблоки и груши), которые хранятся на 10 складах. Вам нужно посчитать общие остатки каждого фрукта на складах. Для этого мы убираем поле с наименованием склада и группируем данные по полю, где указано наименование фруктов:

SELECT fruit, sum(fruit_cnt) as cnt FROM remains
GROUP BY fruit;

Пример: выручка по странам:

SELECT country_name, SUM(revenue) as revenue FROM county_sales
GROUP BY country_name;

Важно:

  • В SELECT можно включать только агрегатные функции или столбцы из GROUP BY.
  • Порядок группировки: GROUP BY → агрегация.

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

HAVING фильтрует результаты после агрегации (в отличие от WHERE).

Пример: страны с выручкой больше 1 млн:

SELECT country_name, SUM(revenue) as revenue FROM county_sales
Where date >=2024-01-01GROUP BY country_name
HAVING SUM(revenue) > 1000000;

Отличие от WHERE:

  • WHERE фильтрует до агрегации;
  • HAVING — после.

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

Оконные функции (OVER) позволяют применять агрегацию без свертки строк.

Пример: сумма продаж по продуктам с накоплением:

SELECT
	date,
	product,
	SUM(sales) OVER(PARTITION BY product ORDER BY date) as running_total
FROM sales

Ключевые возможности:

  • PARTITION BY — аналог GROUP BY внутри окна;
  • ORDER BY — порядок вычислений.

Примеры:

  1. Количество пользователей по городам:
SELECT city, count(clinet_uk) as cnt FROM users
GROUP BY city
  1. Средний возраст клиентов по статусу:
SELECT status, AVG(age) as avg_age FROM customers
GROUP BY status
  1. Топ-5 товаров по продажам:
SELECT 
	product,
	SUM(sales) as sales
FROM sales
WHERE date >=2025-01-01GROUP BY product
ORDER BY sales DESC
LIMIT 5;

Агрегатные функции — мощный инструмент для анализа данных в SQL. Они позволяют:

  • Считать количество, сумму, среднее, максимум и минимум;
  • Группировать данные с GROUP BY;
  • Фильтровать агрегированные результаты через HAVING;
  • Использовать оконные функции для сложных расчётов.

Советы по оптимизации:

  1. Фильтруйте данные WHERE до агрегации;
  2. Используйте индексы для столбцов в GROUP BY;
  3. Для больших таблиц применяйте приблизительные агрегаты — например, APPROX_COUNT_DISTINCT.

Освоив агрегатные функции, вы сможете легко строить отчёты, анализировать метрики и оптимизировать запросы.

Подпишитесь на нашу рассылку
Имя*
Email*
Номер телефона*
Заполняя данную форму, Вы соглашаетесь с политикой конфиденциальности
Никакого спама. Только точечные рассылки с лучшими материалами.
  • Курсы-симуляторы
  • Авторские курсы
  • Бесплатные курсы
  • Программы с ВУЗами