Урок 4.2: Группировка данных с помощью GROUP BY в SQL
Группировка данных - важный инструмент для анализа и обобщения информации в SQL. Оператор GROUP BY позволяет объединять строки с одинаковыми значениями в указанных столбцах и применять агрегатные функции к каждой группе. В этом уроке вы узнаете, как использовать GROUP BY для создания отчетов и анализа данных на примерах из базы Sakila.
Основы использования GROUP BY
Синтаксис
SELECT column1, AGG_FUNCTION(column2)
FROM table
GROUP BY column1;
Важное правило
При использовании GROUP BY каждый столбец в SELECT должен:
- либо быть указан в
GROUP BY; - либо быть обернут агрегатной функцией (
SUM,COUNT,AVG,MIN,MAXи т.д.).
Пример: Сумма платежей по каждому клиенту
SELECT customer_id, SUM(amount) AS total_paid
FROM payment
GROUP BY customer_id;
Результат: Возвращает идентификатор клиента и сумму платежей для каждого клиента.
Пример: Количество платежей по сотруднику
SELECT staff_id, COUNT(*) AS payments_count
FROM payment
GROUP BY staff_id;
Результат: Возвращает идентификатор сотрудника и количество обработанных им платежей.
Пример: Средний платеж по дате
SELECT DATE(payment_date) AS pay_date, AVG(amount) AS avg_payment
FROM payment
GROUP BY DATE(payment_date);
Результат: Возвращает средний размер платежа по каждой дате.
Вариант: GROUP BY по алиасу
SELECT DATE(payment_date) AS pay_date, AVG(amount) AS avg_payment
FROM payment
GROUP BY pay_date;
Этот вариант работает в MySQL/MariaDB, где допускается использование алиаса в GROUP BY.
Но это поведение не универсально для всех СУБД и не считается переносимым стандартным SQL.
Для кросс-СУБД запросов надежнее использовать полный вариант GROUP BY DATE(payment_date).
Использование GROUP BY с несколькими столбцами
Вы можете группировать данные сразу по нескольким столбцам для более детального анализа.
Пример: Сумма платежей по сотруднику и клиенту
SELECT staff_id, customer_id, SUM(amount) AS total_paid
FROM payment
GROUP BY staff_id, customer_id;
Результат: Возвращает идентификатор сотрудника, идентификатор клиента и сумму платежей по каждой паре «сотрудник-клиент».
Практическое применение
На этом этапе лучше тренироваться с GROUP BY на одной таблице. В следующих уроках вы увидите, как использовать агрегатные функции и в запросах, которые объединяют данные из нескольких таблиц.
- Отчёт по выручке за каждый день:
SELECT DATE(payment_date) AS pay_date, SUM(amount) AS total_sales FROM payment GROUP BY DATE(payment_date) ORDER BY pay_date; - Самые активные клиенты по количеству аренд:
SELECT customer_id, COUNT(*) AS rentals_count FROM rental GROUP BY customer_id ORDER BY rentals_count DESC;
Основные выводы из этого урока
Оператор GROUP BY позволяет группировать данные и применять агрегатные функции к каждой группе. Это мощный инструмент для создания отчетов и анализа информации в SQL. Практикуйтесь с GROUP BY на примерах из базы Sakila, чтобы научиться быстро получать сводные данные и строить аналитические запросы.