PIVOT в Oracle SQL — как превращать строки в столбцы для аналитики

🟢 PIVOT в Oracle SQL. Введение

PIVOT в Oracle SQL позволяет преобразовывать строки в столбцы, создавая сводные таблицы прямо в SQL-запросе. Это удобно для отчетов, где значения одной колонки становятся заголовками столбцов.

Если раньше это требовало группировок и декодирования, то теперь всё можно сделать одной понятной конструкцией.


🔤 Написание

sql
SELECT * FROM (
<исходный_запрос>
)
PIVOT (
<агрегатная_функция>(<значение>)
FOR <столбец> IN (<значение1> AS alias1, <значение2> AS alias2, ...)
);

🔄 Где используется PIVOT

  • Построение сводных отчётов

  • Аналитика по категориям

  • Представление метрик по колонкам

  • Преобразование формата таблицы

  • Объединение с UNPIVOT и WITH


🧪 10 Примеров использования PIVOT

1️⃣ Продажи по кварталам

sql
SELECT * FROM (
SELECT product_id, TO_CHAR(order_date, 'Q') AS quarter, amount
FROM sales
)
PIVOT (
SUM(amount) FOR quarter IN ('1' AS Q1, '2' AS Q2, '3' AS Q3, '4' AS Q4)
);

2️⃣ Количество сотрудников по должностям

sql
SELECT * FROM (
SELECT department_id, job_id FROM employees
)
PIVOT (
COUNT(*) FOR job_id IN ('IT_PROG' AS IT, 'SA_REP' AS SALES)
);

3️⃣ Средняя зарплата по полу

sql
SELECT * FROM (
SELECT gender, salary FROM workers
)
PIVOT (
AVG(salary) FOR gender IN ('M' AS Мужчины, 'F' AS Женщины)
);

4️⃣ Сводка по регионам

sql
SELECT * FROM (
SELECT region, year, revenue FROM sales_data
)
PIVOT (
SUM(revenue) FOR year IN (2022 AS "2022", 2023 AS "2023")
);

5️⃣ Уникальные пользователи по дню недели

sql
SELECT * FROM (
SELECT user_id, TO_CHAR(login_date, 'DY') AS day FROM logins
)
PIVOT (
COUNT(DISTINCT user_id) FOR day IN ('MON' AS Monday, 'TUE' AS Tuesday)
);

6️⃣ PIVOT с числовыми значениями

sql
SELECT * FROM (
SELECT emp_id, month, bonus FROM bonuses
)
PIVOT (
MAX(bonus) FOR month IN (1 AS Jan, 2 AS Feb, 3 AS Mar)
);

7️⃣ Сумма по статусам заказа

sql
SELECT * FROM (
SELECT customer_id, status, amount FROM orders
)
PIVOT (
SUM(amount) FOR status IN ('PENDING' AS Pending, 'SHIPPED' AS Shipped)
);

8️⃣ PIVOT по категориям расходов

sql
SELECT * FROM (
SELECT department, category, cost FROM expenses
)
PIVOT (
SUM(cost) FOR category IN ('IT' AS IT, 'HR' AS HR, 'OPS' AS Operations)
);

9️⃣ Комбинация PIVOT и JOIN

sql
SELECT d.department_name, p.*
FROM departments d
JOIN (
SELECT * FROM (
SELECT department_id, job_id, salary FROM employees
)
PIVOT (
AVG(salary) FOR job_id IN ('IT_PROG' AS IT, 'HR_REP' AS HR)
)
) p ON d.department_id = p.department_id;

🔟 Сводка по категориям с порядком

sql
SELECT * FROM (
SELECT category, TO_CHAR(sale_date, 'YYYY-MM') AS month, revenue FROM sales
)
PIVOT (
SUM(revenue) FOR month IN ('2023-01' AS Jan, '2023-02' AS Feb)
);

🧩 Заключение

PIVOT — это удобный инструмент для создания сводных таблиц в SQL, превращая строки в столбцы и делая отчёты наглядными. Он избавляет от множества ручных манипуляций и позволяет сосредоточиться на аналитике.

💡 Запомни:

  • PIVOT работает только с агрегатными функциями

  • Вложенный подзапрос — обязательный

  • IN (...) задаёт список будущих столбцов

  • Имена столбцов можно задать явно через AS


🔜 Следующая статья:

PARTITION в Oracle SQL — как использовать разбиение данных


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии