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 GROUP BY clause do in SQL?
It groups rows that have the same value in a specified column into summary rows, like grouping all sales by each product.
Click to reveal answer
beginner
Write a simple SQL query to count how many orders each customer has made using GROUP BY on a single column.
SELECT customer_id, COUNT(*) AS order_count FROM orders GROUP BY customer_id;
Click to reveal answer
beginner
Why do we need to use GROUP BY when using aggregate functions like COUNT() or SUM()?
Because aggregate functions summarize data, GROUP BY tells SQL how to group rows before summarizing, so you get results per group instead of one total.
Click to reveal answer
intermediate
Can you use GROUP BY on multiple columns? What happens if you only use one column?
Yes, you can group by multiple columns to get more detailed groups. Using one column groups rows only by that column's values, combining all other differences.
Click to reveal answer
intermediate
What will happen if you select columns in a query with GROUP BY but don't include them in the GROUP BY clause or an aggregate function?
SQL will give an error because it doesn't know how to group or summarize those columns. Every selected column must be grouped or aggregated.
Click to reveal answer
What does the SQL clause GROUP BY do when used with a single column?
ASorts the rows by that column
BDeletes duplicate rows from the table
CGroups rows with the same value in that column into summary rows
DFilters rows based on a condition
✗ Incorrect
GROUP BY groups rows sharing the same value in the specified column, allowing aggregate functions to summarize each group.
Which aggregate function counts the number of rows in each group?
ASUM()
BCOUNT()
CAVG()
DMAX()
✗ Incorrect
COUNT() counts the number of rows in each group.
What will this query return? SELECT category, COUNT(*) FROM products GROUP BY category;
ATotal count of all products
BError because COUNT(*) is used
CList of categories without counts
DCount of products per category
✗ Incorrect
The query groups products by category and counts how many products are in each category.
If you select a column not in the GROUP BY clause or an aggregate function, what happens?
ASQL returns an error
BSQL ignores that column
CSQL returns the first value it finds
DSQL groups by that column automatically
✗ Incorrect
SQL requires all selected columns to be either grouped or aggregated; otherwise, it throws an error.
Which of these is a valid use of GROUP BY on a single column?
ASELECT name, SUM(price) FROM sales GROUP BY name;
BSELECT name, SUM(price) FROM sales;
CSELECT SUM(price) FROM sales GROUP BY name;
DSELECT name FROM sales GROUP BY price;
✗ Incorrect
Option A groups sales by name and sums prices per name, which is valid.
Explain in your own words how the GROUP BY clause works when grouping by a single column.
Think about how you might group items in real life, like sorting fruits by type.
You got /3 concepts.
Describe a simple example where you would use GROUP BY on one column and an aggregate function in a query.
Imagine counting how many orders each customer made.
You got /4 concepts.
Practice
(1/5)
1. What does the GROUP BY clause do in an SQL query?
easy
A. It deletes duplicate rows from the table.
B. It sorts the rows in ascending order.
C. It groups rows that have the same values in a specified column.
D. It filters rows based on a condition.
Solution
Step 1: Understand the purpose of GROUP BY
The GROUP BY clause collects rows with the same value in the specified column into groups.
Step 2: Differentiate from other clauses
Unlike ORDER BY which sorts, or WHERE which filters, GROUP BY organizes data for aggregation.
Final Answer:
It groups rows that have the same values in a specified column. -> Option C
Quick Check:
GROUP BY = grouping rows by column [OK]
Hint: GROUP BY collects rows sharing column values [OK]
Common Mistakes:
Confusing GROUP BY with ORDER BY
Thinking GROUP BY filters rows
Assuming GROUP BY deletes duplicates
2. Which of the following is the correct syntax to group data by the column department?
easy
A. SELECT department, COUNT(*) FROM employees GROUP BY department;
B. SELECT department, COUNT(*) FROM employees ORDER BY department;
C. SELECT department, COUNT(*) FROM employees WHERE department;
D. SELECT department, COUNT(*) FROM employees HAVING department;
Solution
Step 1: Identify correct GROUP BY usage
The GROUP BY clause must follow FROM and group by the column named.
Step 2: Check each option's clause
SELECT department, COUNT(*) FROM employees GROUP BY department; uses GROUP BY correctly; others use ORDER BY, WHERE, HAVING incorrectly here.
Final Answer:
SELECT department, COUNT(*) FROM employees GROUP BY department; -> Option A
Quick Check:
GROUP BY syntax = SELECT ... GROUP BY column [OK]
Hint: GROUP BY follows FROM and groups by column [OK]
Common Mistakes:
Using ORDER BY instead of GROUP BY
Using WHERE to group data
Using HAVING without aggregation
3. Given the table sales with columns region and amount, what is the output of this query?
SELECT region, SUM(amount) FROM sales GROUP BY region;
medium
A. A list of all sales amounts without grouping.
B. A list of regions with the total sales amount for each region.
C. An error because SUM() cannot be used with GROUP BY.
D. A list of regions sorted by amount.
Solution
Step 1: Understand GROUP BY with SUM()
The query groups rows by region and sums the amount for each group.
Step 2: Predict output format
The output shows each region once with the total amount of sales in that region.
Final Answer:
A list of regions with the total sales amount for each region. -> Option B
Quick Check:
GROUP BY + SUM() = grouped sums [OK]
Hint: GROUP BY + SUM() gives totals per group [OK]
Common Mistakes:
Thinking SUM() can't be used with GROUP BY
Expecting ungrouped list
Confusing sorting with grouping
4. Identify the error in this SQL query:
SELECT department, COUNT(*) FROM employees;
medium
A. The query is correct and will run without errors.
B. COUNT(*) cannot be used without WHERE clause.
C. department cannot be selected without aggregation.
D. Missing GROUP BY clause for the department column.
Solution
Step 1: Check SELECT with aggregation
COUNT(*) is an aggregate but department is not aggregated or grouped.
Step 2: Identify missing GROUP BY
To select department with COUNT(*), GROUP BY department is required.
Final Answer:
Missing GROUP BY clause for the department column. -> Option D
Quick Check:
Non-aggregated columns need GROUP BY [OK]
Hint: Non-aggregated columns need GROUP BY [OK]
Common Mistakes:
Ignoring missing GROUP BY
Thinking COUNT(*) needs WHERE
Assuming query runs without error
5. You have a table orders with columns customer_id, order_date, and total. You want to find the average order total per customer but only for customers who have placed more than 3 orders. Which query correctly achieves this?
hard
A. SELECT customer_id, AVG(total) FROM orders GROUP BY customer_id HAVING COUNT(*) > 3;
B. SELECT customer_id, AVG(total) FROM orders WHERE COUNT(*) > 3 GROUP BY customer_id;
C. SELECT customer_id, AVG(total) FROM orders GROUP BY customer_id WHERE COUNT(*) > 3;
D. SELECT customer_id, AVG(total) FROM orders HAVING COUNT(*) > 3 GROUP BY customer_id;
Solution
Step 1: Use GROUP BY to group orders by customer_id
This groups all orders per customer to calculate aggregates.
Step 2: Use HAVING to filter groups with more than 3 orders
HAVING filters groups after aggregation; WHERE cannot filter aggregates.
Final Answer:
SELECT customer_id, AVG(total) FROM orders GROUP BY customer_id HAVING COUNT(*) > 3; -> Option A
Quick Check:
HAVING filters groups, WHERE filters rows [OK]
Hint: Use HAVING to filter groups after GROUP BY [OK]