SQL(4/14)
💻Агрегатные функции и группировка данных (GROUP BY, HAVING) — основы для аналитика (4/14)
Агрегатные функции — это мощный инструмент в SQL, с помощью которого мы сводим большое количество данных к ключевым показателям: суммам, средним, количеству уникальных элементов и многое другое. В комбинации с оператором GROUP BY они позволяют группировать данные по каким-либо признакам и считать эти показатели для каждой группы отдельно.
Основные агрегатные функции в SQL включают:
SUM() — сумма значений в столбце. AVG() — среднее арифметическое. COUNT() — количество строк или значений (можно использовать COUNT(*) для всех строк). MIN() — минимальное значение. MAX() — максимальное значение.
Рассмотрим таблицу продаж sales: | product_id | category | amount | |------------|-------------|--------| | 1 | Electronics | 100 | | 2 | Electronics | 200 | | 3 | Furniture | 150 | | 4 | Furniture | 350 | | 5 | Electronics | 50 | Примеры запросов и ответы:
1. Посчитать сумму продаж по категориям: SELECT category, SUM(amount) AS total_sales FROM sales GROUP BY category; Ответ: | category | total_sales | |-------------|-------------| | Electronics | 350 | | Furniture | 500 |
2. Посчитать количество товаров в каждой категории: SELECT category, COUNT(product_id) AS product_count FROM sales GROUP BY category; Ответ: | category | product_count | |-------------|---------------| | Electronics | 3 | | Furniture | 2 |
3. Найти категории, где суммарные продажи превышают 300 (фильтрация групп): SELECT category, SUM(amount) AS total_sales FROM sales GROUP BY category HAVING SUM(amount) > 300; Ответ: | category | total_sales | |-------------|-------------| | Furniture | 500 |
Подводные камни при работе с GROUP BY и агрегатами
-
HAVING нельзя заменить WHERE. Многие новички пишут WHERE SUM(amount) > 300, но так делать нельзя — WHERE фильтрует строки до группировки, а HAVING — после. Попытка использовать агрегат в WHERE вызовет ошибку.
-
Не все столбцы могут быть в SELECT без агрегатных функций, если используется GROUP BY. Если в запросе нет агрегата, а есть GROUP BY, в SELECT должны быть либо агрегатные функции, либо столбцы, по которым идёт группировка.
-
Неочевидные повторения из-за группировки. Если не включить правильные столбцы в GROUP BY, может получиться дублирование или неожиданные результаты.
-
Использование агрегатов поверх NULL-значений. Например, SUM и AVG проигнорируют NULL, что может вызвать разницу с ожидаемыми показателями, если пропуски не учитываются явно.
Понимание агрегатов и группировки — фундамент для аналитика, позволяющий быстро превратить сырые данные в полезные сводки. В следующих постах продолжим разбирать более сложные SQL-конструкторы и приёмы оптимизации.
Запомните, даже самый спокойный медведь умеет рычать, когда надо. Берегите голову, берегите данные — и пусть в вашем дне будет немного тишины, ясности и добрых переменных.