How to use ROLLUP in PostgreSQL: Your Guide to Simplified Grouping

Hey there, SQL enthusiasts! 🌟 Ready to take your PostgreSQL skills to the next level? If you’ve been following along, you know we’ve been on a roll with advanced grouping features like GROUPING SETS and CUBE. Today, we’re closing the loop with ROLLUP, another dynamo that can make your data summarizations cleaner and more efficient.

What is ROLLUP?

ROLLUP is a SQL clause that helps you perform multiple GROUP BY operations with a single query. It creates subtotals and grand totals across columns, giving you a quick and comprehensive view of your data. It’s the sort of feature that once you start using, you’ll wonder how you ever lived without!

When Should You Use ROLLUP?

Got a report to run that requires various levels of aggregation? Instead of writing multiple queries or doing a bunch of post-processing, ROLLUP has got you covered. It generates the subtotals and grand totals you need with one elegant statement.

Basic Syntax

Here’s the bare-bones structure of how to use ROLLUP:

SELECT column1, column2, aggregate_function(column3)
FROM table_name
GROUP BY ROLLUP (column1, column2);

Practical Examples

Still working with our tv_series table (now with release_year— thanks, ALTER TABLE!), let’s run through some real-world scenarios.

Example 1: Counting TV Series by Genre and Release Year

SELECT genre, release_year, COUNT(*)
FROM tv_series
GROUP BY ROLLUP (genre, release_year);

This query not only counts TV series for each combination of genre and release_year, but it also provides a subtotal count for each genre and a grand total count.

genre release_year count
Animation 2014 1
Animation 2013 1
Animation 1989 1
Animation 3
Comedy 2020 1
Crime 2017 2
Crime 2014 2
Crime 2018 1
Crime 2013 1
Crime 6

Example 2: Average Season Count by Genre and Release Year

SELECT genre, release_year, AVG(seasons)
FROM tv_series
GROUP BY ROLLUP (genre, release_year);

This example shows the average number of seasons by genre and release_year, along with subtotals and a grand total.

Tips and Best Practices

  1. Order Matters: The order of columns in the ROLLUP clause affects the output. If you switch column places, you’ll get different subtotals.

  2. NULLs: When you see NULLs in your output, don’t panic! They represent subtotals and grand totals.

Common Errors and Solutions

Error Message:

ERROR: column "X" must appear in the GROUP BY clause or be used in an aggregate function


Same as with CUBE, this error arises when a column isn’t in the ROLLUP clause or used as part of an aggregate function.


Make sure all your selected columns are either part of the ROLLUP or part of an aggregate function.

To Wrap Roll Up

Alright, now you’re armed with the power of ROLLUP! This little gem is perfect for when you need to summarize data at multiple levels with minimal code. It’s a great way to round off your arsenal of advanced SQL grouping techniques, so take it out for a spin on your tv_series table and let the data roll in! 🎉

So go ahead, have fun rolling up your data, and until next time — keep querying! 🚀

Leave a Reply