SQL ROLLUP
The ROLLUP
operator in SQL is an extension of the GROUP BY
clause. It enables hierarchical or cumulative subtotals and a grand total in the result set. It's often used for generating summary reports with multiple levels of aggregation.
Why Use SQL ROLLUP?
- Quickly compute subtotals and totals for hierarchical groupings.
- Simplifies complex aggregation queries.
- Ideal for reports and data summaries that require grouped and cumulative views.
Syntax
Key Points
- Hierarchical Aggregation:
- Aggregates at each level of the specified columns, starting from the most detailed to the overall total.
- NULLs Indicate Totals:
- Rows with
NULL
values represent subtotals or grand totals.
- Rows with
- Fewer Combinations than
CUBE
:- Unlike
CUBE
,ROLLUP
does not calculate all combinations—just cumulative groupings.
- Unlike
Example Dataset
Sales Table
Region | Product | Sales |
---|---|---|
North | A | 100 |
North | B | 200 |
South | A | 150 |
South | B | 250 |
Examples
1. Using ROLLUP for Region and Product
Result:
Region | Product | TotalSales |
---|---|---|
North | A | 100 |
North | B | 200 |
North | NULL | 300 |
South | A | 150 |
South | B | 250 |
South | NULL | 400 |
NULL | NULL | 700 |
2. Using GROUPING Function
To distinguish subtotals and totals from regular rows, use the GROUPING()
function. It returns 1
for grouped columns and 0
for detailed rows.
Result:
Region | Product | TotalSales | IsRegionGrouped | IsProductGrouped |
---|---|---|---|---|
North | A | 100 | 0 | 0 |
North | B | 200 | 0 | 0 |
North | NULL | 300 | 0 | 1 |
South | A | 150 | 0 | 0 |
South | B | 250 | 0 | 0 |
South | NULL | 400 | 0 | 1 |
NULL | NULL | 700 | 1 | 1 |
3. Filtering Subtotals and Totals
You can filter the result set to include only specific levels of aggregation using the GROUPING()
function.
Result:
Region | Product | TotalSales |
---|---|---|
North | NULL | 300 |
South | NULL | 400 |
NULL | NULL | 700 |
How ROLLUP Works
For GROUP BY ROLLUP (Region, Product)
, SQL generates results for:
(Region, Product)
– Detailed grouping.(Region)
– Subtotal for eachRegion
.()
– Grand total (no grouping).
Difference Between ROLLUP and CUBE
Feature | ROLLUP | CUBE |
---|---|---|
Aggregation Levels | Hierarchical (cumulative) | All combinations |
Use Case | Totals and subtotals | Full multi-dimensional analysis |
Complexity | Simpler | More comprehensive |
Equivalent Query Without ROLLUP
Without ROLLUP
, you would need to write multiple GROUP BY
queries and combine their results using UNION ALL
:
Using ROLLUP
simplifies this process into a single query.
Common Use Cases
- Sales Reports:
- Generate sales subtotals for regions and products, along with a grand total.
- Financial Summaries:
- Aggregate revenue or expenses at different hierarchical levels.
- Inventory Reports:
- Summarize stock levels by category, subcategory, and overall.
Performance Considerations
- Indexes: Proper indexing can improve performance when using
ROLLUP
. - Data Size: Large datasets with multiple levels of aggregation may impact query performance.
- Database Support: Supported in major databases like SQL Server, PostgreSQL, Oracle, and MySQL (v8.0+).
Conclusion
The SQL ROLLUP
operator is a powerful tool for generating hierarchical data summaries, making it ideal for reporting and business intelligence. Its ability to calculate subtotals and totals with minimal effort simplifies complex queries.