Группировка данных с GROUP BY и фильтрация с HAVING

В SQL оператор GROUP BY используется для группировки строк в таблице по одному или нескольким столбцам. Это позволяет выполнять агрегатные функции, такие как SUM, COUNT, AVG и другие, над каждой группой. Оператор HAVING применяется для фильтрации групп, основанной на результатах агрегатных функций.

Вот базовая структура запроса, использующего GROUP BY и HAVING:

SELECT столбец1, агрегатная_функция(столбец2)
FROM таблица
GROUP BY столбец1
HAVING условие_на_агрегатную_функцию;

Пример

Предположим, у нас есть таблица sales с данными о продажах:

idпродавецсумма

1

Иван

100

2

Ольга

200

3

Иван

150

4

Ольга

250

5

Иван

200

И мы хотим узнать, какие продавцы имеют общую сумму продаж более 300. Для этого мы можем использовать следующий запрос:

SELECT продавец, SUM(сумма) AS общая_сумма
FROM sales
GROUP BY продавец
HAVING SUM(сумма) > 300;

Разбор запроса

  1. SELECT продавец, SUM(сумма) AS общая_сумма — выбираем столбец продавец и вычисляем общую сумму продаж для каждого продавца.

  2. FROM sales — указываем таблицу, из которой берем данные.

  3. GROUP BY продавец — группируем строки по столбцу продавец.

  4. HAVING SUM(сумма) > 300 — фильтруем группы, оставляя только те, у которых общая сумма продаж больше 300.

В результате выполнения этого запроса мы получим:

продавецобщая_сумма

Иван

450

Ольга

450

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

Last updated