Группировка по нескольким столбцам в SQL: GROUP BY x, y
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Агрегирование данных по нескольким измерениям выполняется с помощью оператора GROUP BY
, включающего в себя несколько столбцов:
SELECT производитель, год, COUNT(*)
FROM продажи_авто
GROUP BY производитель, год;
В данном случае каждая уникальная комбинация значений производитель
и год
формирует отдельную группу, в которой функция COUNT(*)
подсчитывает количество продаж. Не стоит ограничиваться только функцией подсчёта – вы можете использовать и другие агрегатные функции, такие как SUM()
, AVG()
, MIN()
, MAX()
и т.д.
Разбираемся с использованием GROUP BY
При использовании GROUP BY
с несколькими столбцами мы можем проводить более детальный анализ данных. Группировка по таким полям, как производитель
и год
, позволяет увидеть временные тенденции различных брендов.
Группировка с применением нескольких столбцов
Чем больше столбцов вы включаете в GROUP BY
, тем детальнее будут ваши группы. Однако важно уметь управлять детальностью запроса и не создавать слишком много мелких групп, избегая излишней сложности.
А где пропавшие группы?
Если ожидаемые вами группы отсутствуют в результатах запроса, то в данных нет записей для некоторых комбинаций столбцов. Это может служить хорошим методом обнаружения "пробелов" в данных.
Порядок в SQL-запросах
Хотите писать корректные SQL-запросы? Строго соблюдайте следующую последовательность: SELECT
, FROM
, WHERE
, GROUP BY
, HAVING
, ORDER BY
. Это предотвращает появление ошибок и получение некорректных результатов.
Визуализация
Продемонстрируем на примере корзины фруктов: Наши данные — это корзина с фруктами, а каждый вид фрукта и цвет — это столбец.
Корзина (🧺): [🍏, 🍎, 🍌, 🍌, 🍏, 🍎, 🥭, 🍎]
Допустим, мы проводим группировку по виду и цвету:
| Вид | Цвет | Количество |
| ----------| -----------| ---------- |
| Яблоко (🍎)| Красный | 📊🔴 |
| Яблоко (🍏)| Зелёный | 📊🟢 |
| Банан (🍌) | Жёлтый | 📊🟡 |
| Манго (🥭) | Оранжевый | 📊🟠 |
В SQL мы группируем данные и подсчитываем их количество, вот так визуализируя процесс.
Работаем с агрегированными результатами
HAVING
vs WHERE
WHERE
фильтрует данные до группировки, а HAVING
применяется после группировки. Необходимо это учесть, чтобы корректно фильтровать данные.
Приводим в порядок с помощью ORDER BY
ORDER BY
позволяет упорядочить результаты после группировки. Кроме того, этот оператор можно использовать в сочетании с агрегатными функциями, даже если они не указаны в SELECT
.
Великий иллюзионист – подзапросы
Подзапросы позволяют добавить сложные вычисления и фильтрацию агрегатов в ваш SQL-запрос, увеличивая его точность и сложность.
Продвинутое использование GROUP BY
Загадка NULL-значений
Если вы наткнулись на NULL
, воспринимайте его как джокера в вашем наборе данных. GROUP BY
принимает NULL
как отдельное значение. Примените COALESCE
, чтобы заменить эти элементы на определённое значение в случае необходимости.
Размер означает многое
Ваши группы могут различаться по размеру, и наиболее мелкие из них иногда сложно заметить. Используйте COUNT(*)
, чтобы не пропустить их. Маленькие группы могут быть недостаточно информативными, поэтому всегда учитывайте плотность данных.
Выявление нарушений в данных
GROUP BY
способен выявить аномалии в данных. Уникальное агрегатное значение может говорить о том, что требуется провести дополнительную проверку данных.
Полезные материалы
- SQL GROUP BY Statement — Гид по оператору
GROUP BY
от W3Schools. - sql – Using group by on multiple columns — Дискуссия на Stack Overflow о многостолбцовом использовании
GROUP BY
. - MySQL :: MySQL 8.0 Reference Manual :: 12.19.3 MySQL Handling of GROUP BY — Официальная документация MySQL, объясняющая принцип работы
GROUP BY
. - SQL: GROUP BY Clause — Объяснение предложения
GROUP BY
на TechOnTheNet. - SQL GROUP BY | Intermediate SQL – Mode — Руководство Mode Analytics с примерами использования
GROUP BY
. - Data Types — Документация Oracle о типах данных, используемых в запросах с
GROUP BY
.