Группировка по нескольким столбцам в SQL: GROUP BY x, y

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Агрегирование данных по нескольким измерениям выполняется с помощью оператора GROUP BY, включающего в себя несколько столбцов:

SQL
Скопировать код
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. Это предотвращает появление ошибок и получение некорректных результатов.

Визуализация

Продемонстрируем на примере корзины фруктов: Наши данные — это корзина с фруктами, а каждый вид фрукта и цвет — это столбец.

Markdown
Скопировать код
Корзина (🧺): [🍏, 🍎, 🍌, 🍌, 🍏, 🍎, 🥭, 🍎]

Допустим, мы проводим группировку по виду и цвету:

Markdown
Скопировать код
| Вид       | Цвет       | Количество |
| ----------| -----------| ---------- |
| Яблоко (🍎)| Красный    |  📊🔴       |
| Яблоко (🍏)| Зелёный    |  📊🟢       |
| Банан (🍌) | Жёлтый     |  📊🟡       |
| Манго (🥭) | Оранжевый  |  📊🟠       |

В SQL мы группируем данные и подсчитываем их количество, вот так визуализируя процесс.

Работаем с агрегированными результатами

HAVING vs WHERE

WHERE фильтрует данные до группировки, а HAVING применяется после группировки. Необходимо это учесть, чтобы корректно фильтровать данные.

Приводим в порядок с помощью ORDER BY

ORDER BY позволяет упорядочить результаты после группировки. Кроме того, этот оператор можно использовать в сочетании с агрегатными функциями, даже если они не указаны в SELECT.

Великий иллюзионист – подзапросы

Подзапросы позволяют добавить сложные вычисления и фильтрацию агрегатов в ваш SQL-запрос, увеличивая его точность и сложность.

Продвинутое использование GROUP BY

Загадка NULL-значений

Если вы наткнулись на NULL, воспринимайте его как джокера в вашем наборе данных. GROUP BY принимает NULL как отдельное значение. Примените COALESCE, чтобы заменить эти элементы на определённое значение в случае необходимости.

Размер означает многое

Ваши группы могут различаться по размеру, и наиболее мелкие из них иногда сложно заметить. Используйте COUNT(*), чтобы не пропустить их. Маленькие группы могут быть недостаточно информативными, поэтому всегда учитывайте плотность данных.

Выявление нарушений в данных

GROUP BY способен выявить аномалии в данных. Уникальное агрегатное значение может говорить о том, что требуется провести дополнительную проверку данных.

Полезные материалы

  1. SQL GROUP BY Statement — Гид по оператору GROUP BY от W3Schools.
  2. sql – Using group by on multiple columns — Дискуссия на Stack Overflow о многостолбцовом использовании GROUP BY.
  3. MySQL :: MySQL 8.0 Reference Manual :: 12.19.3 MySQL Handling of GROUP BY — Официальная документация MySQL, объясняющая принцип работы GROUP BY.
  4. SQL: GROUP BY Clause — Объяснение предложения GROUP BY на TechOnTheNet.
  5. SQL GROUP BY | Intermediate SQL – Mode — Руководство Mode Analytics с примерами использования GROUP BY.
  6. Data Types — Документация Oracle о типах данных, используемых в запросах с GROUP BY.