Bird
Raised Fist0
MySQLquery~5 mins

HAVING clause in MySQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the HAVING clause in SQL?
The HAVING clause is used to filter groups of rows created by GROUP BY based on a condition. It works like WHERE but for grouped data.
Click to reveal answer
beginner
How does HAVING differ from WHERE in SQL?
WHERE filters rows before grouping, while HAVING filters groups after aggregation.
Click to reveal answer
intermediate
Write a simple SQL query using HAVING to find departments with more than 5 employees.
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department HAVING COUNT(*) > 5;
Click to reveal answer
intermediate
Can HAVING be used without GROUP BY? Explain.
Yes, HAVING can be used without GROUP BY to filter aggregated results over the entire table, like HAVING COUNT(*) > 10.
Click to reveal answer
advanced
Why might you get an error if you use a column in HAVING that is not in GROUP BY or an aggregate function?
Because HAVING filters groups, any column used must be part of the grouping or an aggregate. Otherwise, SQL doesn't know how to apply the condition.
Click to reveal answer
What does the HAVING clause filter in an SQL query?
AOnly NULL values
BIndividual rows before grouping
CGroups after aggregation
DTable schema
Which clause is used to filter rows before grouping in SQL?
AWHERE
BHAVING
CGROUP BY
DORDER BY
Can HAVING be used without GROUP BY in MySQL?
AYes, to filter aggregated results over the whole table
BOnly with ORDER BY
CNo, it always requires GROUP BY
DOnly with JOIN
Which of these is a valid HAVING clause condition?
AHAVING salary > 50000
BHAVING COUNT(*) > 10
CHAVING department = 'Sales'
DHAVING employee_id = 100
What happens if you use a non-aggregated column in HAVING that is not in GROUP BY?
AResults are sorted
BQuery runs fine
CColumn is ignored
DSQL error occurs
Explain the difference between WHERE and HAVING clauses in SQL.
Think about when filtering happens in the query process.
You got /4 concepts.
    Describe a scenario where you would use HAVING without GROUP BY.
    Consider aggregate functions applied to the whole table.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the HAVING clause in SQL?
      easy
      A. To filter groups after aggregation
      B. To filter rows before grouping
      C. To sort the result set
      D. To join two tables

      Solution

      1. Step 1: Understand filtering in SQL

        The WHERE clause filters rows before grouping, but HAVING filters after groups are formed.
      2. Step 2: Identify the role of HAVING

        HAVING is used to filter groups based on aggregate conditions like COUNT or SUM.
      3. Final Answer:

        To filter groups after aggregation -> Option A
      4. Quick Check:

        HAVING filters groups, not rows [OK]
      Hint: HAVING filters groups after aggregation, WHERE filters rows before [OK]
      Common Mistakes:
      • Confusing HAVING with WHERE clause
      • Using HAVING without GROUP BY
      • Thinking HAVING sorts data
      2. Which of the following is the correct syntax to use HAVING with GROUP BY in MySQL?
      easy
      A. SELECT col1 FROM table HAVING COUNT(col2) > 5 GROUP BY col1;
      B. SELECT col1, COUNT(col2) FROM table GROUP BY col1 HAVING COUNT(col2) > 5;
      C. SELECT col1, COUNT(col2) FROM table HAVING COUNT(col2) > 5;
      D. SELECT col1, COUNT(col2) FROM table GROUP BY col1 WHERE COUNT(col2) > 5;

      Solution

      1. Step 1: Recall correct order of clauses

        In SQL, GROUP BY comes before HAVING. The correct order is SELECT -> FROM -> GROUP BY -> HAVING.
      2. Step 2: Check each option's syntax

        SELECT col1, COUNT(col2) FROM table GROUP BY col1 HAVING COUNT(col2) > 5; correctly places GROUP BY before HAVING and includes aggregate function in HAVING condition.
      3. Final Answer:

        SELECT col1, COUNT(col2) FROM table GROUP BY col1 HAVING COUNT(col2) > 5; -> Option B
      4. Quick Check:

        GROUP BY before HAVING [OK]
      Hint: GROUP BY must come before HAVING in SQL syntax [OK]
      Common Mistakes:
      • Placing HAVING before GROUP BY
      • Using WHERE with aggregate functions
      • Omitting GROUP BY when using HAVING
      3. Given the table sales with columns region and amount, what will this query return?
      SELECT region, SUM(amount) AS total_sales FROM sales GROUP BY region HAVING total_sales > 1000;
      medium
      A. All regions with sales less than or equal to 1000
      B. Syntax error because alias can't be used in HAVING
      C. All regions with total sales greater than 1000
      D. Empty result because HAVING filters rows

      Solution

      1. Step 1: Understand the query logic

        The query groups rows by region and sums amount as total_sales.
      2. Step 2: Apply HAVING condition

        It filters groups where total_sales is greater than 1000. Using alias in HAVING is allowed in MySQL.
      3. Final Answer:

        All regions with total sales greater than 1000 -> Option C
      4. Quick Check:

        HAVING filters groups by aggregate result [OK]
      Hint: HAVING filters groups by aggregate values like SUM [OK]
      Common Mistakes:
      • Thinking HAVING filters rows, not groups
      • Assuming alias can't be used in HAVING in MySQL
      • Confusing HAVING with WHERE
      4. Identify the error in this query:
      SELECT department, COUNT(*) FROM employees HAVING COUNT(*) > 10;
      medium
      A. Missing GROUP BY clause before HAVING
      B. COUNT(*) cannot be used in HAVING
      C. HAVING should be replaced with WHERE
      D. No error, query is correct

      Solution

      1. Step 1: Check for GROUP BY usage

        The query uses HAVING with COUNT(*) but does not group by department. HAVING requires GROUP BY to define groups.
      2. Step 2: Understand HAVING requirements

        HAVING filters groups after aggregation. Without GROUP BY, groups are not defined, causing an error.
      3. Final Answer:

        Missing GROUP BY clause before HAVING -> Option A
      4. Quick Check:

        HAVING needs GROUP BY to filter groups [OK]
      Hint: Always use GROUP BY before HAVING to define groups [OK]
      Common Mistakes:
      • Using HAVING without GROUP BY
      • Replacing HAVING with WHERE incorrectly
      • Assuming COUNT(*) can't be in HAVING
      5. You have a products table with columns category, price, and stock. Write a query to find categories where the average price is above 50 and total stock is at least 100.
      Which query correctly uses HAVING to achieve this?
      hard
      A. SELECT category FROM products GROUP BY category WHERE AVG(price) > 50 AND SUM(stock) >= 100;
      B. SELECT category FROM products HAVING AVG(price) > 50 AND SUM(stock) >= 100 GROUP BY category;
      C. SELECT category FROM products WHERE AVG(price) > 50 AND SUM(stock) >= 100 GROUP BY category;
      D. SELECT category FROM products GROUP BY category HAVING AVG(price) > 50 AND SUM(stock) >= 100;

      Solution

      1. Step 1: Recall correct clause order

        The correct order is SELECT -> FROM -> GROUP BY -> HAVING. HAVING filters groups based on aggregate conditions.
      2. Step 2: Analyze each option

        SELECT category FROM products GROUP BY category HAVING AVG(price) > 50 AND SUM(stock) >= 100; correctly groups by category and uses HAVING with aggregate functions AVG(price) and SUM(stock).
      3. Final Answer:

        SELECT category FROM products GROUP BY category HAVING AVG(price) > 50 AND SUM(stock) >= 100; -> Option D
      4. Quick Check:

        HAVING filters grouped data with aggregate conditions [OK]
      Hint: Use HAVING after GROUP BY for aggregate filters [OK]
      Common Mistakes:
      • Placing HAVING before GROUP BY
      • Using WHERE with aggregate functions
      • Omitting GROUP BY when using HAVING
      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