Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What does the SQL clause GROUP BY do when used with multiple columns?
It groups rows that have the same values in all the specified columns, so you can perform aggregate functions on each unique combination of those columns.
Click to reveal answer
beginner
Write a simple example of a GROUP BY clause using two columns: city and department.
Example: SELECT city, department, COUNT(*) FROM employees GROUP BY city, department; This counts employees grouped by each city and department combination.
Click to reveal answer
intermediate
Why is it important to include all non-aggregated columns in the GROUP BY clause?
Because SQL requires that every column in the SELECT list that is not inside an aggregate function must be listed in the GROUP BY clause to know how to group the data.
Click to reveal answer
intermediate
What happens if you use GROUP BY on multiple columns but forget one column that appears in SELECT without aggregation?
The query will cause an error because SQL does not know how to group by the missing column, violating grouping rules.
Click to reveal answer
beginner
Can GROUP BY multiple columns be used to find unique combinations of those columns?
Yes, grouping by multiple columns returns one row per unique combination of those columns, which helps identify distinct groups.
Click to reveal answer
What does GROUP BY city, department do in a SQL query?
AGroups rows by city only
BGroups rows by department only
CGroups rows by unique pairs of city and department
DSorts rows by city and department
✗ Incorrect
GROUP BY with multiple columns groups rows by each unique combination of those columns.
Which columns must appear in the GROUP BY clause?
AOnly columns with numeric data
BAll columns in SELECT that are not aggregated
COnly the first column in SELECT
DNo columns are required
✗ Incorrect
All non-aggregated columns in SELECT must be in GROUP BY to define grouping.
What will happen if you omit a non-aggregated column from GROUP BY?
AQuery will return an error
BQuery will run but ignore that column
CQuery will group by all columns automatically
DQuery will return duplicate rows
✗ Incorrect
SQL requires all non-aggregated columns in SELECT to be in GROUP BY; otherwise, it errors.
Which aggregate function can be used with GROUP BY?
ANOW()
BCONCAT()
CSUBSTRING()
DCOUNT()
✗ Incorrect
COUNT() is an aggregate function that works with GROUP BY to count rows per group.
If you want to count employees per city and department, which query is correct?
ASELECT city, department, COUNT(*) FROM employees GROUP BY city, department;
BSELECT city, department, COUNT(*) FROM employees;
CSELECT city, COUNT(*) FROM employees GROUP BY department;
DSELECT COUNT(*), city, department FROM employees GROUP BY city;
✗ Incorrect
Option A correctly groups by both city and department to count employees per group.
Explain how GROUP BY with multiple columns works and why it is useful.
Think about grouping by city and department together.
You got /3 concepts.
Describe what happens if you include a column in SELECT that is not aggregated and not in GROUP BY.
Remember SQL grouping rules.
You got /3 concepts.
Practice
(1/5)
1. What does the SQL clause GROUP BY column1, column2 do?
easy
A. Sorts the table by column1 and then column2
B. Groups rows by unique combinations of values in column1 and column2
C. Filters rows where column1 equals column2
D. Joins two tables on column1 and column2
Solution
Step 1: Understand GROUP BY purpose
The GROUP BY clause groups rows that have the same values in specified columns.
Step 2: Apply to multiple columns
When multiple columns are listed, grouping happens on unique combinations of those columns' values.
Final Answer:
Groups rows by unique combinations of values in column1 and column2 -> Option B
Quick Check:
GROUP BY multiple columns = group by combinations [OK]
Hint: GROUP BY multiple columns groups by combined unique values [OK]
Common Mistakes:
Thinking GROUP BY sorts data
Confusing GROUP BY with WHERE filtering
Assuming GROUP BY joins tables
2. Which of the following is the correct syntax to group data by two columns named city and year?
easy
A. SELECT city, year FROM table GROUP city, year;
B. SELECT city, year FROM table ORDER BY city, year;
C. SELECT city, year FROM table GROUP BY city, year;
D. SELECT city, year FROM table GROUP BY city year;
Solution
Step 1: Recall GROUP BY syntax
The correct syntax is GROUP BY followed by column names separated by commas.
Step 2: Check each option
SELECT city, year FROM table GROUP BY city, year; uses correct syntax with commas. SELECT city, year FROM table ORDER BY city, year; uses ORDER BY, which is for sorting. SELECT city, year FROM table GROUP city, year; misses BY keyword. SELECT city, year FROM table GROUP BY city year; misses comma between columns.
Final Answer:
SELECT city, year FROM table GROUP BY city, year; -> Option C
Quick Check:
GROUP BY columns separated by commas [OK]
Hint: Use GROUP BY with commas between columns [OK]
Common Mistakes:
Using ORDER BY instead of GROUP BY
Omitting BY keyword after GROUP
Missing commas between column names
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. Total sales amount for each region only
B. Syntax error due to missing GROUP BY columns
C. Total sales amount for each product only
D. Total sales amount for each region and product combination
Solution
Step 1: Analyze SELECT and GROUP BY columns
The query groups rows by both region and product, so each group is a unique pair of region and product.
Step 2: Understand aggregation function SUM(amount)
SUM(amount) calculates total sales amount for each group of region and product.
Final Answer:
Total sales amount for each region and product combination -> Option D
Quick Check:
GROUP BY region, product + SUM = totals per pair [OK]
Hint: GROUP BY columns + SUM aggregates per group [OK]
Common Mistakes:
Thinking it sums only by one column
Assuming syntax error without reason
Ignoring that all selected non-aggregated columns must be grouped
4. Identify the error in this query:
SELECT department, role, COUNT(*) FROM employees GROUP BY department;
medium
A. Missing role column in GROUP BY clause
B. COUNT(*) cannot be used with GROUP BY
C. department should not be in GROUP BY
D. SELECT must include only aggregated columns
Solution
Step 1: Check SELECT columns vs GROUP BY columns
Columns in SELECT that are not aggregated must appear in GROUP BY. Here, role is in SELECT but missing in GROUP BY.
Step 2: Understand aggregation rules
COUNT(*) is valid, but all non-aggregated columns must be grouped to avoid errors.
Final Answer:
Missing role column in GROUP BY clause -> Option A
Quick Check:
All non-aggregated SELECT columns must be in GROUP BY [OK]
Hint: Include all non-aggregated SELECT columns in GROUP BY [OK]
Common Mistakes:
Ignoring missing columns in GROUP BY
Thinking COUNT(*) is invalid with GROUP BY
Assuming GROUP BY only needs one column
5. You have a transactions table with columns customer_id, month, and amount. You want to find the average transaction amount per customer per month, but only for months where the customer made more than 3 transactions. Which query correctly achieves this?
hard
A. SELECT customer_id, month, AVG(amount) FROM transactions GROUP BY customer_id, month HAVING COUNT(*) > 3;
B. SELECT customer_id, month, AVG(amount) FROM transactions WHERE COUNT(*) > 3 GROUP BY customer_id, month;
C. SELECT customer_id, month, AVG(amount) FROM transactions GROUP BY customer_id HAVING COUNT(*) > 3;
D. SELECT customer_id, month, AVG(amount) FROM transactions GROUP BY month HAVING COUNT(*) > 3;
Solution
Step 1: Understand filtering groups with HAVING
HAVING filters groups after grouping. To filter groups with more than 3 transactions, use HAVING COUNT(*) > 3.
Step 2: Group by both customer_id and month
To get average per customer per month, group by both columns.
Step 3: Check each option
SELECT customer_id, month, AVG(amount) FROM transactions GROUP BY customer_id, month HAVING COUNT(*) > 3; correctly uses GROUP BY customer_id, month and HAVING COUNT(*) > 3. SELECT customer_id, month, AVG(amount) FROM transactions WHERE COUNT(*) > 3 GROUP BY customer_id, month; misuses WHERE with COUNT(). SELECT customer_id, month, AVG(amount) FROM transactions GROUP BY customer_id HAVING COUNT(*) > 3; groups only by customer_id, missing month. SELECT customer_id, month, AVG(amount) FROM transactions GROUP BY month HAVING COUNT(*) > 3; groups only by month, missing customer_id.
Final Answer:
SELECT customer_id, month, AVG(amount) FROM transactions GROUP BY customer_id, month HAVING COUNT(*) > 3; -> Option A
Quick Check:
Use HAVING to filter grouped counts [OK]
Hint: Use HAVING to filter groups after GROUP BY [OK]