Bird
Raised Fist0
PostgreSQLquery~10 mins

GROUPING SETS for multiple groupings in PostgreSQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - GROUPING SETS for multiple groupings
Start Query
↓
FROM table
↓
Apply GROUPING SETS
↓
Calculate aggregates for each grouping set
↓
Combine results
↓
Return final result set
The query reads data from the table, applies multiple grouping sets, calculates aggregates for each set, combines all results, and returns them.
Execution Sample
PostgreSQL
SELECT department, role, COUNT(*) AS count
FROM employees
GROUP BY GROUPING SETS ((department), (role));
This query counts employees grouped by department and separately by role using GROUPING SETS.
Execution Table
StepActionGrouping SetGroup Key ValuesAggregate CalculationOutput Row
1Read row-department=Sales, role=Manager--
2Read row-department=Sales, role=Developer--
3Read row-department=HR, role=Manager--
4Apply grouping set 1(department)SalesCOUNT=2(Sales, NULL, 2)
5Apply grouping set 1(department)HRCOUNT=1(HR, NULL, 1)
6Apply grouping set 2(role)ManagerCOUNT=2(NULL, Manager, 2)
7Apply grouping set 2(role)DeveloperCOUNT=1(NULL, Developer, 1)
8Combine results---4 rows total
9Return result---Query ends
💡 All rows processed and aggregates computed for each grouping set.
Variable Tracker
VariableStartAfter Step 4After Step 5After Step 6After Step 7Final
department group counts{}{"Sales":2}{"Sales":2,"HR":1}{"Sales":2,"HR":1}{"Sales":2,"HR":1}{"Sales":2,"HR":1}
role group counts{}{}{}{"Manager":2}{"Manager":2,"Developer":1}{"Manager":2,"Developer":1}
Key Moments - 2 Insights
Why do we see NULL in the role column when grouping by department?
When grouping by department only, the role column is not part of the grouping key, so it shows NULL in those rows as seen in execution_table rows 4 and 5.
How does GROUPING SETS differ from using multiple GROUP BY queries?
GROUPING SETS runs all groupings in one query and combines results, as shown in execution_table steps 4-7, instead of running separate queries for each grouping.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what is the grouping set applied?
A(department)
B(department, role)
C(role)
DNo grouping set applied
💡 Hint
Check the 'Grouping Set' column at step 6 in the execution_table.
At which step does the query combine all grouping set results?
AStep 8
BStep 7
CStep 4
DStep 9
💡 Hint
Look for the action 'Combine results' in the execution_table.
If we add (department, role) to GROUPING SETS, how would variable 'department group counts' change after step 7?
AIt would remain the same
BIt would include counts grouped by both department and role
CIt would reset to empty
DIt would only count roles
💡 Hint
Consider how adding a new grouping set affects counts tracked per grouping key.
Concept Snapshot
GROUPING SETS syntax:
SELECT columns, aggregate()
FROM table
GROUP BY GROUPING SETS ((group1), (group2), ...);

It runs multiple groupings in one query.
Each grouping set produces separate grouped results.
NULL appears in columns not in the current grouping set.
Full Transcript
This visual execution shows how a PostgreSQL query with GROUPING SETS works step-by-step. The query reads each row from the employees table. Then it applies each grouping set separately: first grouping by department, then by role. For each grouping set, it counts how many rows belong to each group. The results from all grouping sets are combined into one final result set. Variables track counts per group key. Nulls appear in columns not included in the current grouping set. This method is efficient to get multiple groupings in one query instead of running many queries.

Practice

(1/5)
1. What is the main purpose of using GROUPING SETS in a PostgreSQL query?
easy
A. To group data by multiple combinations in a single query
B. To filter rows based on conditions
C. To join multiple tables together
D. To sort the result set by multiple columns

Solution

  1. Step 1: Understand GROUPING SETS functionality

    GROUPING SETS allows grouping by multiple sets of columns in one query, combining results.
  2. Step 2: Compare with other options

    Filtering rows is done by WHERE, joining tables by JOIN, sorting by ORDER BY, not GROUPING SETS.
  3. Final Answer:

    To group data by multiple combinations in a single query -> Option A
  4. Quick Check:

    GROUPING SETS = multiple groupings in one query [OK]
Hint: GROUPING SETS groups multiple ways at once [OK]
Common Mistakes:
  • Confusing GROUPING SETS with WHERE filtering
  • Thinking GROUPING SETS sorts data
  • Mixing GROUPING SETS with JOIN operations
2. Which of the following is the correct syntax to use GROUPING SETS in a PostgreSQL query?
easy
A. SELECT col1, col2 FROM table ORDER BY GROUPING SETS (col1, col2);
B. SELECT col1, col2 FROM table WHERE GROUPING SETS (col1, col2);
C. SELECT col1, col2 FROM table HAVING GROUPING SETS (col1, col2);
D. SELECT col1, col2 FROM table GROUP BY GROUPING SETS ((col1), (col2));

Solution

  1. Step 1: Identify correct GROUP BY usage

    GROUPING SETS is used inside GROUP BY clause with sets of columns in parentheses.
  2. Step 2: Check other clauses

    WHERE, ORDER BY, HAVING do not support GROUPING SETS syntax.
  3. Final Answer:

    SELECT col1, col2 FROM table GROUP BY GROUPING SETS ((col1), (col2)); -> Option D
  4. Quick Check:

    GROUPING SETS goes inside GROUP BY [OK]
Hint: GROUPING SETS always follows GROUP BY keyword [OK]
Common Mistakes:
  • Placing GROUPING SETS in WHERE clause
  • Using GROUPING SETS with ORDER BY
  • Confusing HAVING with GROUP BY for GROUPING SETS
3. Given the table sales(product, region, amount), what will be the output of this query?
SELECT product, region, SUM(amount) FROM sales GROUP BY GROUPING SETS ((product), (region));
medium
A. Sum of amounts grouped by product only
B. Sum of amounts grouped by product and region combined
C. Sum of amounts grouped by product and sum grouped by region in one result
D. Syntax error due to wrong GROUPING SETS usage

Solution

  1. Step 1: Understand GROUPING SETS ((product), (region))

    This groups data twice: once by product alone, once by region alone, producing two sets of grouped sums.
  2. Step 2: Analyze output rows

    Result will have rows with product and NULL region, and rows with region and NULL product, each showing sum of amounts.
  3. Final Answer:

    Sum of amounts grouped by product and sum grouped by region in one result -> Option C
  4. Quick Check:

    GROUPING SETS gives multiple groupings combined [OK]
Hint: GROUPING SETS returns all specified groupings combined [OK]
Common Mistakes:
  • Expecting grouping by both columns together
  • Thinking it returns only one grouping
  • Assuming syntax error without checking GROUP BY clause
4. Identify the error in this query:
SELECT product, region, SUM(amount) FROM sales GROUP BY GROUPING SETS (product, region);
medium
A. Missing WHERE clause for filtering
B. GROUPING SETS requires each grouping to be enclosed in parentheses
C. GROUP BY cannot have multiple columns
D. SUM() cannot be used with GROUPING SETS

Solution

  1. Step 1: Check GROUPING SETS syntax

    GROUPING SETS expects a list of grouping sets, each enclosed in parentheses, e.g., ((product), (region)).
  2. Step 2: Identify the error

    The query uses (product, region) without extra parentheses, which is invalid syntax for GROUPING SETS.
  3. Final Answer:

    GROUPING SETS requires each grouping to be enclosed in parentheses -> Option B
  4. Quick Check:

    GROUPING SETS syntax needs nested parentheses [OK]
Hint: Each grouping set must be in its own parentheses [OK]
Common Mistakes:
  • Omitting parentheses around grouping sets
  • Thinking SUM() is incompatible with GROUPING SETS
  • Confusing GROUP BY multiple columns with GROUPING SETS syntax
5. You want to create a report showing total sales grouped by product, by region, and by both product and region together. Which GROUPING SETS clause achieves this in one query?
hard
A. GROUP BY GROUPING SETS ((product), (region), (product, region))
B. GROUP BY product, region
C. GROUP BY GROUPING SETS (product, region)
D. GROUP BY CUBE (product, region)

Solution

  1. Step 1: Understand required groupings

    We need three groupings: by product alone, by region alone, and by both together.
  2. Step 2: Match with GROUPING SETS syntax

    GROUPING SETS ((product), (region), (product, region)) explicitly lists all three groupings.
  3. Step 3: Evaluate other options

    GROUP BY product, region groups by both columns together only; C is invalid syntax; D (CUBE) includes all combinations but is not GROUPING SETS.
  4. Final Answer:

    GROUP BY GROUPING SETS ((product), (region), (product, region)) -> Option A
  5. Quick Check:

    Explicit sets list all needed groupings [OK]
Hint: List all groupings inside GROUPING SETS parentheses [OK]
Common Mistakes:
  • Using GROUP BY without GROUPING SETS for multiple groupings
  • Confusing CUBE with GROUPING SETS
  • Incorrect syntax without nested parentheses
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard