Bird
Raised Fist0
MySQLquery~5 mins

JOIN with aggregate functions in MySQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of using JOIN with aggregate functions in SQL?
JOIN combines rows from two or more tables based on a related column, and aggregate functions calculate a summary value (like sum, count) over groups of rows. Together, they help analyze related data across tables.
Click to reveal answer
beginner
Which aggregate function counts the number of rows in a group?
The COUNT() function counts the number of rows in a group, including or excluding NULLs depending on usage.
Click to reveal answer
intermediate
How do you write a JOIN query that sums a column from a related table?
Use JOIN to connect tables, then use SUM() on the related column, and GROUP BY to group results by the main table's key.
Click to reveal answer
beginner
Why do you need GROUP BY when using aggregate functions with JOIN?
GROUP BY groups rows by one or more columns so aggregate functions can calculate summaries per group instead of over the entire result set.
Click to reveal answer
intermediate
What happens if you forget GROUP BY when using aggregate functions with JOIN?
The aggregate function will calculate a single summary for all joined rows, losing detail per group, often leading to incorrect or unexpected results.
Click to reveal answer
What does the COUNT() function do in a JOIN query?
ACounts the number of rows in each group
BJoins two tables together
CCalculates the average of a column
DDeletes duplicate rows
Which clause is necessary to group rows when using SUM() with JOIN?
AWHERE
BORDER BY
CHAVING
DGROUP BY
If you want to find total sales per customer, which SQL elements do you need?
AJOIN, SUM(), GROUP BY
BJOIN, COUNT(), ORDER BY
CWHERE, AVG(), GROUP BY
DJOIN, MAX(), HAVING
What does the HAVING clause do in a JOIN with aggregate functions?
AFilters rows before grouping
BFilters groups after aggregation
CSorts the result set
DJoins tables
Which JOIN type includes all rows from the left table even if there is no match in the right table?
AINNER JOIN
BRIGHT JOIN
CLEFT JOIN
DFULL JOIN
Explain how to use JOIN with aggregate functions to calculate total values per group.
Think about combining tables and then summarizing data by groups.
You got /4 concepts.
    Describe why GROUP BY is important when using aggregate functions with JOIN.
    Consider what happens if you aggregate without grouping.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the following SQL query do?
      SELECT department, COUNT(employee_id) FROM employees JOIN departments ON employees.dept_id = departments.id GROUP BY department;
      easy
      A. Counts employees in each department by joining employees and departments tables.
      B. Lists all employees without grouping by department.
      C. Calculates the average salary per department.
      D. Deletes employees who are not assigned to any department.

      Solution

      1. Step 1: Understand the JOIN operation

        The query joins the employees and departments tables using the department ID to combine related data.
      2. Step 2: Analyze the GROUP BY and COUNT

        It groups the results by department and counts the number of employees in each group.
      3. Final Answer:

        Counts employees in each department by joining employees and departments tables. -> Option A
      4. Quick Check:

        JOIN + GROUP BY + COUNT = Employee count per department [OK]
      Hint: JOIN tables, GROUP BY key, then apply COUNT [OK]
      Common Mistakes:
      • Ignoring GROUP BY causes wrong aggregation
      • Using COUNT without JOIN returns incomplete data
      • Confusing COUNT with SUM or AVG
      2. Which of the following is the correct syntax to get the total sales per customer using JOIN and SUM?
      SELECT customers.name, SUM(orders.amount) FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name;
      easy
      A. SELECT customers.name, SUM(orders.amount) FROM customers LEFT JOIN orders GROUP BY customers.name;
      B. SELECT customers.name, SUM(orders.amount) FROM customers JOIN orders WHERE customers.id = orders.customer_id GROUP BY customers.name;
      C. SELECT customers.name, SUM(orders.amount) FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name;
      D. SELECT customers.name, SUM(orders.amount) FROM customers, orders GROUP BY customers.name;

      Solution

      1. Step 1: Check JOIN syntax

        SELECT customers.name, SUM(orders.amount) FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name; uses correct INNER JOIN syntax with ON clause to link customers and orders.
      2. Step 2: Verify GROUP BY and SUM usage

        SELECT customers.name, SUM(orders.amount) FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name; correctly groups by customer name and sums order amounts.
      3. Final Answer:

        SELECT customers.name, SUM(orders.amount) FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name; -> Option C
      4. Quick Check:

        JOIN with ON + GROUP BY + SUM = Correct syntax [OK]
      Hint: Use JOIN ... ON ... with GROUP BY for aggregates [OK]
      Common Mistakes:
      • Using WHERE instead of ON in JOIN
      • Missing ON clause causes syntax error
      • Grouping by wrong column
      3. Given tables:
      employees(id, name, dept_id)
      departments(id, department)
      What is the output of this query?
      SELECT d.department, COUNT(e.id) AS emp_count FROM employees e LEFT JOIN departments d ON e.dept_id = d.id GROUP BY d.department ORDER BY emp_count DESC;
      medium
      A. Syntax error due to missing GROUP BY column.
      B. List of departments with employee counts, including departments with zero employees.
      C. List of employees with their department names.
      D. List of departments with employee counts, excluding departments with zero employees.

      Solution

      1. Step 1: Understand LEFT JOIN effect

        FROM employees e LEFT JOIN departments d ON e.dept_id = d.id includes all employees and matching departments if they exist. Departments with no employees do not appear because no employee row matches them.
      2. Step 2: GROUP BY and COUNT behavior

        Grouping by d.department counts employees only for departments that have at least one employee (count >=1). Departments with zero employees are excluded.
      3. Final Answer:

        List of departments with employee counts, excluding departments with zero employees. -> Option D
      4. Quick Check:

        LEFT JOIN from employees + GROUP BY department excludes zero counts [OK]
      Hint: LEFT JOIN keeps all left rows, COUNT counts matches [OK]
      Common Mistakes:
      • Assuming INNER JOIN behavior excludes zero counts
      • Confusing COUNT(*) with COUNT(column)
      • Ignoring NULL values in grouping
      4. Identify the error in this query:
      SELECT d.department, COUNT(e.id) FROM employees e JOIN departments d ON e.dept_id = d.id WHERE e.salary > 50000 GROUP BY e.dept_id;
      medium
      A. GROUP BY should use d.department instead of e.dept_id.
      B. Missing HAVING clause for salary filter.
      C. COUNT(e.id) cannot be used with JOIN.
      D. ON clause is incorrect syntax.

      Solution

      1. Step 1: Check GROUP BY columns

        The SELECT lists d.department but GROUP BY uses e.dept_id, causing mismatch.
      2. Step 2: Fix GROUP BY to match SELECT

        GROUP BY should use d.department or include it to avoid errors.
      3. Final Answer:

        GROUP BY should use d.department instead of e.dept_id. -> Option A
      4. Quick Check:

        GROUP BY columns must match SELECT non-aggregates [OK]
      Hint: GROUP BY columns must match SELECT non-aggregates [OK]
      Common Mistakes:
      • Grouping by wrong or missing columns
      • Using WHERE instead of HAVING for aggregates
      • Incorrect JOIN ON syntax
      5. You have tables:
      orders(order_id, customer_id, amount)
      customers(customer_id, name)
      Write a query to find customers who have total orders amount greater than 1000, including customers with no orders showing zero total.
      Which query is correct?
      hard
      A. SELECT c.name, SUM(o.amount) AS total FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id WHERE total > 1000 GROUP BY c.name;
      B. SELECT c.name, COALESCE(SUM(o.amount), 0) AS total FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name HAVING total > 1000;
      C. SELECT c.name, SUM(o.amount) AS total FROM customers c JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name HAVING total > 1000;
      D. SELECT c.name, SUM(o.amount) AS total FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name WHERE total > 1000;

      Solution

      1. Step 1: Use LEFT JOIN to include customers without orders

        LEFT JOIN ensures all customers appear, even if no matching orders exist.
      2. Step 2: Use COALESCE to convert NULL sums to zero and HAVING to filter totals

        COALESCE replaces NULL with 0; HAVING filters groups by aggregate result.
      3. Final Answer:

        SELECT c.name, COALESCE(SUM(o.amount), 0) AS total FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.name HAVING total > 1000; -> Option B
      4. Quick Check:

        LEFT JOIN + COALESCE + HAVING filters totals correctly [OK]
      Hint: Use LEFT JOIN + COALESCE + HAVING for conditional aggregates [OK]
      Common Mistakes:
      • Using WHERE instead of HAVING for aggregate filters
      • Ignoring NULL sums for customers without orders
      • Using INNER JOIN excludes customers with zero orders
      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