🤨 Сводные таблицы в SQL: простой способ с CASE WHEN:

Сводные таблицы — это трюк в SQL, чтобы собрать данные в компактный вид. Вместо того чтобы показывать каждую запись отдельно, вы делаете колонки из категорий (например, из месяцев или кварталов). Так отчёт становится короче и проще для чтения. Сегодня разберём самый простой метод с CASE WHEN — он работает везде, без сложностей. Покажу на примере продаж в магазине.

Что такое сводная таблица на пальцах:
Представьте: у вас есть список заказов, где каждый заказ — отдельная строка. В сводной таблице вы группируете по клиенту и показываете суммы по кварталам в колонках (Q1, Q2 и т.д.). Вместо 6 строк на двух клиентов — всего 2 строки, где всё видно сразу.

Пример: таблица заказов
Вот исходная таблица Orders (продажи за год):

| customer_id | quarter | order_amount |
|-------------|---------|--------------|
| 101         | Q1      | 5000         |
| 101         | Q2      | 7000         |
| 101         | Q3      | 6000         |
| 102         | Q1      | 3000         |
| 102         | Q2      | 4500         |
| 102         | Q4      | 5500         |

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

Как это сделать шаг за шагом:
• Группируем по клиенту: GROUP BY customer_id — чтобы данные по каждому клиенту были в одной строке.
• Создаём колонки с CASE WHEN: Для каждого квартала проверяем “если это Q1, то суммируем сумму заказа, иначе 0”. SUM() посчитает итог.

Вот полный запрос:

SELECT  
  customer_id,  
  SUM(CASE WHEN quarter = 'Q1' THEN order_amount ELSE 0 END) AS q1_sales,  
  SUM(CASE WHEN quarter = 'Q2' THEN order_amount ELSE 0 END) AS q2_sales,  
  SUM(CASE WHEN quarter = 'Q3' THEN order_amount ELSE 0 END) AS q3_sales,  
  SUM(CASE WHEN quarter = 'Q4' THEN order_amount ELSE 0 END) AS q4_sales  
FROM Orders  
GROUP BY customer_id  
ORDER BY customer_id;  

Что получится:

| customer_id | q1_sales | q2_sales | q3_sales | q4_sales |
|-------------|----------|----------|----------|----------|
| 101         | 5000     | 7000     | 6000     | 0        |
| 102         | 3000     | 4500     | 0        | 5500     |

Теперь по клиенту 101 всё в одной строке: видно, что в Q4 он не покупал. Легко сравнить!

Итог:
CASE WHEN — это лёгкий способ сделать сводную таблицу.

🍸 Если вы нашли пост для себя полезным, то накидывайте реакций, чтобы я понимал, что вам эта тема интересна!
❤️Поддержать канал бустами, чтобы у автора появился дополнительный функционал можно - здесь (это бесплатно и доступно с подпиской telegram premium)

❓ Пробовали сводные таблицы? Что считали — продажи или что-то другое? Делитесь в комментах!
✔️ Подпишитесь на канал, чтобы не пропустить следующие посты.

Сделал сайт - оцените:
🚬 Вопросы, обучение, консультации

@@dima_sqlit


Ссылки