How to use CUBE in PostgreSQL

Hello! 👋 So you’ve conquered GROUPING SETS and you’re hungry for more ways to slice and dice your data? Well, you’re in luck! Today we’re diving into the CUBE operator in PostgreSQL, another powerhouse feature for multi-dimensional analysis.

What is CUBE?

In PostgreSQL, the CUBE clause allows you to generate multiple grouping sets in a more succinct manner. It’s particularly handy when you want a cross-tabular report, kind of like a pivot table in Excel, where you see all possible combinations of groupings.

When to Use CUBE?

CUBE really shines when you’re tasked with complex reporting requirements that require examining data from multiple angles. With CUBE, you don’t have to manually specify each grouping set; it automatically generates all possible combinations for you.

Basic Syntax

Here’s the simplified syntax of a SQL query using CUBE:

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

Let’s Roll With Some Examples

We’re sticking with our trusty tv_series table for these examples. This table has columns like title, genre, seasons, and release_year.

Example 1: Counting Series by Genre and Release Year

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

With this query, you’ll get counts for each combination of genre and release_year, plus the totals for each genre and each release_year.

See sample output below

genre release_year count
Science Fiction 2017 1
Science Fiction 2016 2
Science Fiction 11
Crime 6
2016 7
2005 2
2013 6

Example 2: Sum of Seasons by Genre and Release Year

SELECT genre, release_year, SUM(seasons)
FROM tv_series
GROUP BY CUBE (genre, release_year);

Here, you’ll get the total number of seasons for each genre and release_year, as well as the totals for each genre and release_year.

Tips and Best Practices

  1. Avoid Overuse: While CUBE can generate all possible combinations, sometimes that’s more than what you need, making your query slow. Use it judiciously!

  2. Combining with Other Operators: Yes, you can combine CUBE with ROLLUP and GROUPING SETS for even more sophisticated queries. Just make sure you really need that level of complexity before diving in.

Common Errors and Solutions

Error Message:

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


You’ve included a column that isn’t part of the CUBE clause nor used in an aggregate function.


Make sure that all selected columns either appear in the GROUP BY CUBE clause or are part of an aggregate function like COUNT, SUM, etc.

Wrapping Up

And there you have it, a crash course in using the CUBE operator for your multi-dimensional data needs. It’s a potent tool that can save you time and simplify your queries when used appropriately. So go ahead, apply this newfound knowledge to your tv_series dataset and watch your SQL queries transform into multi-dimensional masterpieces!

Until next time, keep rocking those queries! 🚀

Leave a Reply