0Pricing
SQL Academy · Урок

GROUP BY для одного и нескольких столбцов

Группируйте строки по одному или нескольким столбцам, чтобы получать промежуточные итоги и разбивку по категориям, и изучайте планы запросов GROUP BY

«GROUP BY для одного и нескольких столбцов» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Что делает GROUP BY

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

Группировка по одному столбцу

Общее количество заказов для каждого пользователя:

SELECT user_id, COUNT(*) AS order_count, SUM(total) AS revenue
FROM orders
GROUP BY user_id
ORDER BY revenue DESC;

Группировка по нескольким столбцам

Подгруппы по категории и стране:

SELECT country, category, SUM(total) AS revenue
FROM orders o
JOIN products p ON p.id = o.product_id
JOIN users   u ON u.id = o.user_id
GROUP BY country, category
ORDER BY country, revenue DESC;

Каждый столбец в SELECT должен участвовать в группировке или агрегации

Правило стандартного SQL:

-- WRONG — email is neither grouped nor aggregated:
SELECT user_id, email, COUNT(*)
FROM orders
GROUP BY user_id;     -- ERROR

-- RIGHT — group by both, or use an aggregate:
SELECT user_id, MAX(email) AS email, COUNT(*)
FROM orders
GROUP BY user_id;

GROUP BY по выражению

Группировка по результату выражения, например по месячному интервалу:

SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY date_trunc('month', created_at)
ORDER BY month;

GROUP BY по позиции или псевдониму

В PostgreSQL можно выполнять группировку по позиции в списке SELECT или по псевдониму:

SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
GROUP BY month             -- alias
ORDER BY 1;                -- position

Наборы группировки, ROLLUP и CUBE

Вычисление нескольких вариантов группировки в одном запросе — идеально для промежуточных итогов:

SELECT country, category, SUM(total)
FROM orders o JOIN ...
GROUP BY ROLLUP (country, category);

-- Returns:  per (country, category),  per country,  grand total

Пустых групп не бывает

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

GROUP BY и индексы

Планировщик может использовать агрегирование с хешированием, то есть построить хеш-таблицу групп, или применить стратегию сортировки с последующей группировкой. Индексы по столбцам группировки могут ускорить второй подход.

Оконные функции и GROUP BY

GROUP BY объединяет строки. Оконные функции добавляют столбцы с агрегатными значениями, сохраняя каждую строку. Выбирайте подходящий инструмент — это подробно рассматривается в уроке «Подробно об оконных функциях».

Псевдонимы в HAVING и WHERE

Логический порядок: FROM → WHERE → GROUP BY → HAVING → SELECT. WHERE не видит агрегатные значения, а HAVING видит.

Итоги

GROUP BY — основной инструмент для создания отчетов.

  • Каждый столбец в SELECT должен участвовать в группировке или агрегации
  • Выполняйте группировку по столбцам, выражениям или псевдонимам
  • Используйте ROLLUP, CUBE и GROUPING SETS для перекрестных таблиц

Быстрая проверка

В запросе с GROUP BY country может ли список SELECT содержать столбец city, который не участвует ни в агрегации, ни в группировке?

Часто задаваемые вопросы

Урок «GROUP BY для одного и нескольких столбцов» бесплатный?

Да — полный текст урока «GROUP BY для одного и нескольких столбцов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «GROUP BY для одного и нескольких столбцов»?

Группируйте строки по одному или нескольким столбцам, чтобы получать промежуточные итоги и разбивку по категориям, и изучайте планы запросов GROUP BY Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «GROUP BY для одного и нескольких столбцов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. COUNT, SUM, AVG, MIN, MAX
  2. GROUP BY для одного и нескольких столбцов
  3. HAVING и WHERE
  4. Распространённые ошибки: NULL в агрегатах
← Назад к SQL Academy