Given tables: Orders(id, customer_id, amount) Customers(id, name) Write a query to find customers who spent more than 1000 in total orders.
ASELECT Customers.name FROM Customers LEFT JOIN Orders ON Customers.id = Orders.customer_id WHERE Orders.amount > 1000;
BSELECT Customers.name FROM Customers JOIN Orders ON Customers.id = Orders.customer_id WHERE SUM(Orders.amount) > 1000;
CSELECT Customers.name FROM Customers JOIN Orders ON Customers.id = Orders.customer_id GROUP BY Customers.name HAVING SUM(Orders.amount) > 1000;
DSELECT Customers.name FROM Orders JOIN Customers ON Orders.customer_id = Customers.id WHERE Orders.amount > 1000;
Step-by-Step Solution
Solution:
Step 1: Understand aggregation need
We must sum order amounts per customer and filter totals over 1000.
Step 2: Use GROUP BY and HAVING
GROUP BY Customers.name groups orders; HAVING filters sums.
Final Answer:
SELECT Customers.name FROM Customers JOIN Orders ON Customers.id = Orders.customer_id GROUP BY Customers.name HAVING SUM(Orders.amount) > 1000; -> Option C
Quick Check:
Use HAVING with GROUP BY for aggregated filters [OK]
Quick Trick:Use HAVING to filter grouped aggregates [OK]
Common Mistakes:
MISTAKES
Using WHERE with aggregate functions
Missing GROUP BY clause
Master "Table Relationships" in SQL
9 interactive learning modes - each teaches the same concept differently