Агрегатные функции SQL: COUNT, AVG, SUM для аналитики в гадальной студии

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


Содержание

  1. Пример схемы базы данных «Гадальная студия»
  2. COUNT – подсчёт количества записей
  3. AVG – среднее значение
  4. SUM – суммирование
  5. GROUP BY и HAVING: группировка и фильтрация
  6. Полезные советы и типичные подводные камни

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

  • COUNT — считает количество строк (или непустых значений столбца).
  • AVG, вычисляет среднее арифметическое числового столбца.
  • SUM — суммирует все значения числового столбца.

Эти функции работают одинаково во всех популярных СУБД: MySQL, PostgreSQL, Microsoft SQL Server, Oracle и др.


Пример схемы базы данных «Гадальная студия»

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

CREATE TABLE Гадалки (
 id INT PRIMARY KEY,
 имя VARCHAR(50) NOT NULL,
 специализация VARCHAR(30) -- например, «Таро», «Нумерология», «Хиромантия»
);

CREATE TABLE Сеансы (
 id INT PRIMARY KEY,
 гадалка_id INT REFERENCES Гадалки(id),
 клиент_id INT,
 дата DATE,
 стоимость DECIMAL(10,2), -- стоимость сеанса в рублях
 рейтинг TINYINT -- оценка от 1 до 5
);

С помощью этой схемы мы сможем собрать статистику:

  • Сколько сеансов провела каждая гадалка (COUNT).
  • Средний рейтинг её работы (AVG).
  • Общая выручка (SUM).

COUNT – подсчёт количества записей

Общее количество сеансов за всё время

SELECT COUNT(*) AS Общее_количество_сеансов
FROM Сеансы;

Результат будет выглядеть, например, так:

Общее_количество_сеансов
-----------------------
 1245

Сеансы по каждой гадалке

SELECT g.имя,
 COUNT(s.id) AS Количество_сеансов
FROM Гадалки g
LEFT JOIN Сеансы s ON g.id = s.гадалка_id
GROUP BY g.id, g.имя
ORDER BY Количество_сеансов DESC;

Здесь LEFT JOIN гарантирует, что даже у гадалки без сеансов появится строка с нулём.

Подсчёт уникальных клиентов

SELECT COUNT(DISTINCT клиент_id) AS Уникальных_клиентов
FROM Сеансы;

Эта метрика часто используется для оценки «охвата» студии.


AVG – среднее значение

Средний рейтинг гадалки

SELECT g.имя,
 AVG(s.рейтинг) AS Средний_рейтинг
FROM Гадалки g
JOIN Сеансы s ON g.id = s.гадалка_id
GROUP BY g.id, g.имя
HAVING COUNT(s.id) >= 5 -- учитываем только тех, у кого минимум 5 отзывов
ORDER BY Средний_рейтинг DESC;

Функция AVG автоматически игнорирует NULL‑значения, поэтому сеансы без оценки не влияют на результат.

Средняя стоимость сеанса по специализации

SELECT g.специализация,
 AVG(s.стоимость) AS Средняя_стоимость
FROM Гадалки g
JOIN Сеансы s ON g.id = s.гадалка_id
GROUP BY g.специализация;

Эта аналитика помогает понять, какие виды гаданий более прибыльны.


SUM – суммирование

Общая выручка студии

SELECT SUM(стоимость) AS Общая_выручка
FROM Сеансы;

Выручка по гадалкам

SELECT g.имя,
 SUM(s.стоимость) AS Выручка_гадалки
FROM Гадалки g
JOIN Сеансы s ON g.id = s.гадалка_id
GROUP BY g.id, g.имя
ORDER BY Выручка_гадалки DESC;

Выручка за конкретный месяц

SELECT DATE_FORMAT(дата, '%Y-%m') AS Месяц,
 SUM(стоимость) AS Выручка_в_мес
FROM Сеансы
WHERE дата BETWEEN '2026-01-01' AND '2026-12-31'
GROUP BY Месяц
ORDER BY Месяц;

В MySQL используется DATE_FORMAT, в PostgreSQL — TO_CHAR, а в SQL Server — FORMAT или CONVERT.


GROUP BY и HAVING: группировка и фильтрация

Комбинация GROUP BY + агрегатных функций позволяет получать «срезы» данных. HAVING применяется для фильтрации уже агрегированных результатов (в отличие от WHERE, который фильтрует строки до агрегации).

Пример: топ‑3 гадалки по выручке, у которых средний рейтинг выше 4,0

SELECT g.имя,
 SUM(s.стоимость) AS Выручка,
 AVG(s.рейтинг) AS Средний_рейтинг,
 COUNT(s.id) AS Кол_сеансов
FROM Гадалки g
JOIN Сеансы s ON g.id = s.гадалка_id
GROUP BY g.id, g.имя
HAVING AVG(s.рейтинг) > 4.0

ORDER BY Выручка DESC
LIMIT 3;

Здесь HAVING отсекает гадалок с низким рейтингом, а LIMIT (или TOP в SQL Server) оставляет только три лучших.


Полезные советы и типичные подводные камни

  • NULL‑значения. Агрегатные функции игнорируют NULL, но COUNT() считает все строки, а COUNT(column) — только непустые. Если нужно «полное» количество, используйте COUNT().
  • Тип данных. Для AVG и SUM выбирайте типы с достаточной точностью (например, DECIMAL(12,2)), иначе возможна потеря копеек.
  • Индексы. При больших таблицах ускорьте запросы, создавая индексы по колонкам, участвующим в JOIN и WHERE (например, гадалка_id, дата).
  • Пост‑агрегационная фильтрация. Не путайте WHERE и HAVING. Если нужно отобрать только те группы, у которых, к примеру, выручка > 100 000 ₽, используйте HAVING SUM(стоимость) > 100000.
  • Параллельные запросы. Современные СУБД (PostgreSQL 15+, MySQL 8+, SQL Server 2019+) умеют распараллеливать агрегацию, но это работает лучше, когда данные распределены по нескольким файлам/страницам.
  • Кеширование результатов. Если отчёт «выручка за месяц» нужен часто, рассмотрите материализованный представление (MATERIALIZED VIEW) или предвычисление в отдельной таблице.

Агрегатные функции COUNT, AVG и SUM — фундаментальные инструменты для любой аналитики, в т.ч. и в столь необычной сфере, как статистика гадалок. С их помощью можно быстро получить:

  • Объём работы каждого предсказателя;
  • Средний уровень удовлетворённости клиентов;
  • Общую и по‑специализации выручку.

Правильное построение запросов, учёт NULL, использование GROUP BY/HAVING и оптимизация индексов позволяют получать точные и быстрые отчёты даже при больших объёмах данных.

Теперь вы вооружены знаниями, чтобы построить любые отчёты о работе вашей «Гадальной студии» и принимать решения, основанные на реальной статистике.


Автор: ваш виртуальный помощник, 2026‑08‑09