Menu
Coddy logo textTech

Преобразование строк в столбцы

Часть раздела Продвинутый уровень путешествия по SQL на Coddy — урок 14 из 27.

Сочетайте условную агрегацию с GROUP BY, чтобы превратить строки в столбцы. Это SQL-версия сводной таблицы из электронных таблиц.

Предположим, что sales содержит строки вида (month, product, units). Чтобы увидеть по одной строке на каждый месяц с отдельным столбцом для каждого продукта:

SELECT
    month,
    SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
    SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b
FROM sales
GROUP BY month

Группа GROUP BY, которую видит каждое выражение SUM(CASE …), — это строки за один месяц; CASE выбирает срез для одного продукта.

challenge icon

Задание

Легко

Доступные таблицы и столбцы:

  • <strong>sales</strong>: <strong>month</strong>, <strong>product</strong>, <strong>units</strong>

Разверните данные так, чтобы каждая строка представляла собой один month со следующими столбцами:

  • month
  • apples: общее количество units для продукта 'apples' за этот месяц
  • bananas: то же самое для 'bananas'
  • cherries: то же самое для 'cherries'
  • total: общее количество units по всем продуктам за этот месяц

Верните только те месяцы, в которых total составляет не менее 20. Отсортируйте по month.

Шпаргалка

Используйте условную агрегацию с GROUP BY для преобразования строк в столбцы:

SELECT
    month,
    SUM(CASE WHEN product = 'A' THEN units ELSE 0 END) AS product_a,
    SUM(CASE WHEN product = 'B' THEN units ELSE 0 END) AS product_b,
    SUM(units) AS total
FROM sales
GROUP BY month
HAVING SUM(units) >= threshold
ORDER BY month

Каждый SUM(CASE …) суммирует только те строки, которые соответствуют этому продукту внутри каждой группы GROUP BY.

Попробуйте сами

SELECT month,
       -- по одному SUM(CASE ...) на продукт, плюс общая сумма
FROM sales
GROUP BY month
-- отфильтровать месяцы, где total >= 20
ORDER BY month
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Продвинутый уровень