Introduction
We use JOIN with aggregate functions to combine data from two tables and then calculate totals, averages, or counts on the combined data.
SELECT columns, AGGREGATE_FUNCTION(column) FROM table1 JOIN table2 ON table1.common_column = table2.common_column GROUP BY columns;
SELECT customers.name, COUNT(orders.id) AS order_count FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name;
SELECT products.name, SUM(order_items.quantity) AS total_sold FROM products JOIN order_items ON products.id = order_items.product_id GROUP BY products.name;
SELECT employees.department, AVG(salaries.amount) AS avg_salary FROM employees JOIN salaries ON employees.id = salaries.employee_id GROUP BY employees.department;
CREATE TABLE customers ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE orders ( id INT PRIMARY KEY, customer_id INT, amount DECIMAL(10,2), FOREIGN KEY (customer_id) REFERENCES customers(id) ); INSERT INTO customers VALUES (1, 'Alice'), (2, 'Bob'); INSERT INTO orders VALUES (1, 1, 100.00), (2, 1, 50.00), (3, 2, 75.00); SELECT customers.name, COUNT(orders.id) AS order_count, SUM(orders.amount) AS total_amount FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name;
SELECT department, COUNT(employee_id) FROM employees JOIN departments ON employees.dept_id = departments.id GROUP BY department;SELECT customers.name, SUM(orders.amount) FROM customers JOIN orders ON customers.id = orders.customer_id GROUP BY customers.name;employees(id, name, dept_id)departments(id, department)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;
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;
orders(order_id, customer_id, amount)customers(customer_id, name)Pass the test and this pattern moves unknown