Когда данных много, обычный SELECT уже не спасает. Чтобы быстро получить сводную аналитику, в SQL используют агрегатные функции и оператор HAVING. Это база для отчетов, дашбордов и продуктовой аналитики.
Что делают агрегатные функции
Они считают итог по группе строк:
COUNT()— количество записейSUM()— суммаAVG()— среднее значениеMIN()/MAX()— минимум и максимум
Пример:
SELECT department, COUNT(*) AS employees
FROM staff
GROUP BY department;
Запрос покажет, сколько сотрудников в каждом отделе.
Зачем нужен GROUP BY
GROUP BY объединяет строки с одинаковыми значениями в группы. После этого можно применять агрегаты к каждой группе отдельно.
Например, сумма продаж по менеджерам:
SELECT manager_id, SUM(amount) AS total_sales
FROM orders
GROUP BY manager_id;
Чем HAVING отличается от WHERE
Это один из самых частых вопросов в SQL 👇
WHEREфильтрует строки до группировкиHAVINGфильтрует группы после группировки
Пример: найти менеджеров, у которых продажи больше 100000:
SELECT manager_id, SUM(amount) AS total_sales
FROM orders
GROUP BY manager_id
HAVING SUM(amount) > 100000;
Если попробовать поставить это условие в WHERE, запрос не сработает, потому что агрегат вычисляется только после GROUP BY.
Продвинутые приемы
- Несколько агрегатов сразу
SELECT category_id, COUNT(*) AS products_count, AVG(price) AS avg_price, MAX(price) AS max_price FROM products GROUP BY category_id; - Группировка по нескольким полям
SELECT country, city, COUNT(*) AS users_count FROM users GROUP BY country, city;Так можно строить более точную аналитику.
HAVINGс несколькими условиямиSELECT customer_id, COUNT(*) AS orders_count, SUM(total) AS total_spent FROM orders GROUP BY customer_id HAVING COUNT(*) >= 5 AND SUM(total) > 50000;
Частые ошибки ⚠️
- Использовать в
SELECTполя, которых нет вGROUP BYи которые не обернуты в агрегат - Путать
WHEREиHAVING - Не учитывать
NULL: например,COUNT(column)не считаетNULL, аCOUNT(*)считает все строки
Когда это особенно полезно
- отчеты по продажам
- аналитика пользователей
- контроль KPI
- поиск аномалий в данных
- подготовка витрин для BI 📈
Вывод
Агрегатные функции + GROUP BY + HAVING — это ключевой инструмент для работы с данными в SQL. Если понимать порядок выполнения запроса, можно строить сложные и точные выборки без лишней логики в коде 🔍
Подборка каналов про IT — удобный способ следить за SQL, аналитикой, backend и карьерой в технологиях 🚀