Bird
Raised Fist0
MySQLquery~10 mins

GROUP BY with multiple columns in MySQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - GROUP BY with multiple columns
Start with SELECT query
↓
Identify columns to GROUP BY
↓
Sort rows by first column
↓
Within first column groups, sort by second column
↓
Aggregate rows in each group
↓
Return grouped result set
The query groups rows first by the first column, then by the second column, aggregating data within each group.
Execution Sample
MySQL
SELECT department, role, COUNT(*) AS count
FROM employees
GROUP BY department, role;
This query counts employees grouped by both department and role.
Execution Table
StepRow DataGroup Key (department, role)ActionAggregate Count
1{department: 'Sales', role: 'Manager'}('Sales', 'Manager')Create new group1
2{department: 'Sales', role: 'Salesperson'}('Sales', 'Salesperson')Create new group1
3{department: 'Sales', role: 'Manager'}('Sales', 'Manager')Add to existing group2
4{department: 'HR', role: 'Manager'}('HR', 'Manager')Create new group1
5{department: 'HR', role: 'Recruiter'}('HR', 'Recruiter')Create new group1
6{department: 'HR', role: 'Manager'}('HR', 'Manager')Add to existing group2
7{department: 'Sales', role: 'Salesperson'}('Sales', 'Salesperson')Add to existing group2
8No more rows-Finish grouping-
💡 All rows processed and grouped by department and role.
Variable Tracker
Group KeyStartAfter 1After 2After 3After 4After 5After 6After 7Final
('Sales', 'Manager')011222222
('Sales', 'Salesperson')001111122
('HR', 'Manager')000011222
('HR', 'Recruiter')000001111
Key Moments - 3 Insights
Why does the count for ('Sales', 'Manager') increase only on certain steps?
Because only rows with department 'Sales' and role 'Manager' add to that group, as shown in steps 1 and 3 in the execution_table.
What happens when a new combination of department and role appears?
A new group is created for that combination, as seen in steps 2, 4, and 5 where new groups start.
Why do some groups have the same count after multiple steps?
Because no new rows matching those group keys were processed in those steps, so the count stays the same.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the aggregate count for ('HR', 'Manager') after step 6?
A1
B3
C2
D0
💡 Hint
Check the 'Aggregate Count' column for step 6 in the execution_table.
At which step does the group ('Sales', 'Salesperson') first get created?
AStep 2
BStep 1
CStep 3
DStep 4
💡 Hint
Look for the first 'Create new group' action with group key ('Sales', 'Salesperson') in the execution_table.
If a new row with {department: 'HR', role: 'Manager'} is added after step 7, what would happen to the count?
ACount for ('Sales', 'Manager') increases by 1
BCount for ('HR', 'Manager') increases by 1
CA new group is created
DNo change in any count
💡 Hint
Refer to variable_tracker for ('HR', 'Manager') and how counts increase when matching rows are added.
Concept Snapshot
GROUP BY with multiple columns syntax:
SELECT columns, aggregate_function()
FROM table
GROUP BY column1, column2;

Groups rows first by column1, then by column2.
Aggregates data within each unique combination of these columns.
Full Transcript
This visual execution shows how a SQL query with GROUP BY on multiple columns works. The query groups rows by department and role. Each row is checked, and if its department and role combination is new, a new group is created. If the combination exists, the row is added to that group, increasing the count. The execution table tracks each step, showing how groups form and counts increase. The variable tracker summarizes counts for each group after each step. Key moments clarify common confusions about grouping and counting. The quiz tests understanding of group creation and count updates. The snapshot summarizes the syntax and behavior of GROUP BY with multiple columns.

Practice

(1/5)
1. What does the GROUP BY clause with multiple columns do in a MySQL query?
easy
A. It groups rows based on only the first column listed.
B. It groups rows based on the combination of values in all specified columns.
C. It sorts the rows without grouping them.
D. It filters rows that have duplicate values in any column.

Solution

  1. Step 1: Understand GROUP BY behavior

    The GROUP BY clause groups rows that have the same values in the specified columns together.
  2. Step 2: Multiple columns effect

    When multiple columns are listed, grouping happens on the combined values of all those columns, not individually.
  3. Final Answer:

    It groups rows based on the combination of values in all specified columns. -> Option B
  4. Quick Check:

    GROUP BY multiple columns groups by combined values [OK]
Hint: GROUP BY multiple columns groups by combined column values [OK]
Common Mistakes:
  • Thinking it groups by each column separately
  • Confusing GROUP BY with ORDER BY
  • Assuming it filters duplicates instead of grouping
2. Which of the following is the correct syntax to group data by columns city and department in MySQL?
easy
A. SELECT city, department FROM employees GROUP BY city, department;
B. SELECT city, department FROM employees GROUP city, department;
C. SELECT city, department FROM employees GROUP BY city department;
D. SELECT city, department FROM employees GROUP BY (city, department);

Solution

  1. Step 1: Identify correct GROUP BY syntax

    The correct syntax uses GROUP BY followed by column names separated by commas.
  2. Step 2: Check each option

    SELECT city, department FROM employees GROUP BY city, department; uses correct syntax with commas. Options A, B, and D have syntax errors or wrong keywords.
  3. Final Answer:

    SELECT city, department FROM employees GROUP BY city, department; -> Option A
  4. Quick Check:

    GROUP BY columns separated by commas [OK]
Hint: Use commas to separate columns in GROUP BY [OK]
Common Mistakes:
  • Omitting commas between columns
  • Using wrong keywords like GROUP instead of GROUP BY
  • Using parentheses incorrectly around columns
3. Given the table sales with columns region, product, and amount, what will this query return?
SELECT region, product, SUM(amount) FROM sales GROUP BY region, product;
medium
A. Syntax error due to missing alias for SUM(amount).
B. Total sales amount for each region only.
C. Total sales amount for each product only.
D. Total sales amount for each region and product combination.

Solution

  1. Step 1: Understand GROUP BY with multiple columns

    The query groups rows by both region and product together.
  2. Step 2: Apply SUM aggregation

    Within each group, it sums the amount values, giving total sales per region-product pair.
  3. Final Answer:

    Total sales amount for each region and product combination. -> Option D
  4. Quick Check:

    GROUP BY multiple columns sums per combined group [OK]
Hint: GROUP BY multiple columns sums per combined group [OK]
Common Mistakes:
  • Thinking it sums only by one column
  • Expecting syntax error without alias (alias optional)
  • Confusing GROUP BY with WHERE filtering
4. Identify the error in this query:
SELECT city, department, COUNT(*) FROM employees GROUP BY city;
medium
A. Missing department in GROUP BY causes error or incorrect grouping.
B. COUNT(*) cannot be used with GROUP BY.
C. SELECT must include only aggregated columns.
D. GROUP BY should be after WHERE clause.

Solution

  1. Step 1: Check SELECT and GROUP BY columns

    The query selects city and department but groups only by city.
  2. Step 2: Understand grouping rules

    All non-aggregated columns in SELECT must appear in GROUP BY to avoid errors or unpredictable results.
  3. Final Answer:

    Missing department in GROUP BY causes error or incorrect grouping. -> Option A
  4. Quick Check:

    All selected non-aggregated columns must be in GROUP BY [OK]
Hint: Include all non-aggregated SELECT columns in GROUP BY [OK]
Common Mistakes:
  • Selecting columns not in GROUP BY without aggregation
  • Thinking COUNT(*) is invalid with GROUP BY
  • Misplacing GROUP BY clause
5. You have a transactions table with columns store_id, employee_id, and sales_amount. You want to find the total sales per store and employee but only for employees with total sales above 1000. Which query correctly achieves this?
hard
A. SELECT store_id, employee_id, SUM(sales_amount) FROM transactions GROUP BY store_id HAVING SUM(sales_amount) > 1000;
B. SELECT store_id, employee_id, SUM(sales_amount) FROM transactions WHERE SUM(sales_amount) > 1000 GROUP BY store_id, employee_id;
C. SELECT store_id, employee_id, SUM(sales_amount) FROM transactions GROUP BY store_id, employee_id HAVING SUM(sales_amount) > 1000;
D. SELECT store_id, employee_id, SUM(sales_amount) FROM transactions GROUP BY employee_id, store_id WHERE SUM(sales_amount) > 1000;

Solution

  1. Step 1: Group by both store_id and employee_id

    We need totals per store and employee, so GROUP BY both columns together.
  2. Step 2: Filter groups with HAVING clause

    Use HAVING to filter groups where total sales exceed 1000. WHERE cannot filter aggregated results.
  3. Final Answer:

    SELECT store_id, employee_id, SUM(sales_amount) FROM transactions GROUP BY store_id, employee_id HAVING SUM(sales_amount) > 1000; -> Option C
  4. Quick Check:

    Use HAVING to filter aggregated groups [OK]
Hint: Use HAVING to filter after GROUP BY aggregation [OK]
Common Mistakes:
  • Using WHERE to filter aggregated results
  • Grouping by only one column instead of both
  • Placing WHERE after GROUP BY
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