Bird
Raised Fist0
SQLquery~5 mins

GROUP BY single column in SQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

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
Which aggregate function counts the number of rows in each group?
ASUM()
BCOUNT()
CAVG()
DMAX()
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
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
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;
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

      1. Step 1: Understand the purpose of GROUP BY

        The GROUP BY clause collects rows with the same value in the specified column into groups.
      2. Step 2: Differentiate from other clauses

        Unlike ORDER BY which sorts, or WHERE which filters, GROUP BY organizes data for aggregation.
      3. Final Answer:

        It groups rows that have the same values in a specified column. -> Option C
      4. 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

      1. Step 1: Identify correct GROUP BY usage

        The GROUP BY clause must follow FROM and group by the column named.
      2. 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.
      3. Final Answer:

        SELECT department, COUNT(*) FROM employees GROUP BY department; -> Option A
      4. 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

      1. Step 1: Understand GROUP BY with SUM()

        The query groups rows by region and sums the amount for each group.
      2. Step 2: Predict output format

        The output shows each region once with the total amount of sales in that region.
      3. Final Answer:

        A list of regions with the total sales amount for each region. -> Option B
      4. 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

      1. Step 1: Check SELECT with aggregation

        COUNT(*) is an aggregate but department is not aggregated or grouped.
      2. Step 2: Identify missing GROUP BY

        To select department with COUNT(*), GROUP BY department is required.
      3. Final Answer:

        Missing GROUP BY clause for the department column. -> Option D
      4. 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

      1. Step 1: Use GROUP BY to group orders by customer_id

        This groups all orders per customer to calculate aggregates.
      2. Step 2: Use HAVING to filter groups with more than 3 orders

        HAVING filters groups after aggregation; WHERE cannot filter aggregates.
      3. Final Answer:

        SELECT customer_id, AVG(total) FROM orders GROUP BY customer_id HAVING COUNT(*) > 3; -> Option A
      4. Quick Check:

        HAVING filters groups, WHERE filters rows [OK]
      Hint: Use HAVING to filter groups after GROUP BY [OK]
      Common Mistakes:
      • Using WHERE to filter aggregated counts
      • Placing HAVING before GROUP BY
      • Not filtering groups at all