Rollup SQL: группировка данных и суммирование в SQL
Rollup в SQL - это оператор, который позволяет сгруппировать данные по нескольким уровням агрегации. Он позволяет создавать сводные таблицы, где данные сгруппированы по разным иерархическим уровням.
Например, есть таблица sales, содержащая информацию о продажах товаров в разных регионах в течение года:
| Region | Month | Sales |
|------------|-------|-------|
| North | Jan | 100 |
| North | Feb | 200 |
| North | Mar | 300 |
| South | Jan | 400 |
| South | Feb | 500 |
| South | Mar | 600 |
Используя Rollup, можно создать сводную таблицу, где данные сгруппированы по региону и месяцу, а также общие суммы для каждого уровня:
sql
SELECT Region, Month, SUM(Sales)
FROM sales
GROUP BY ROLLUP(Region, Month)
Результат будет следующий:
| Region | Month | Sales |
|------------|-------|-------|
| North | Jan | 100 |
| North | Feb | 200 |
| North | Mar | 300 |
| North | null | 600 |
| South | Jan | 400 |
| South | Feb | 500 |
| South | Mar | 600 |
| South | null | 1500 |
| null | null | 2100 |
Обратите внимание, что в последней строке присутствуют общие итоги по всей таблице. Это происходит из-за использования оператора null в функции ROLLUP.
Пример реализации Rollup в SQL Server:
sql
SELECT Region, Month, SUM(Sales)
FROM sales
GROUP BY ROLLUP(Region, Month)
Пример реализации Rollup в MySQL:
sql
SELECT Region, Month, SUM(Sales)
FROM sales
GROUP BY Region, Month WITH ROLLUP
В обоих случаях результатом будет таблица, описанная выше.