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-конструкторы и приёмы оптимизации.

Запомните, даже самый спокойный медведь умеет рычать, когда надо. Берегите голову, берегите данные — и пусть в вашем дне будет немного тишины, ясности и добрых переменных.