Joins with grouping · Объединения с группировкой
Reports: joins with grouping
The real power comes from combining what you have learned: join two tables, group the joined rows, and summarise each group with an aggregate.
A common report is "how much has each customer spent?" — join customers to their orders, group by customer, and SUM the totals.
Отчёты: соединения с группировкой
Настоящая сила заключается в сочетании полученных знаний: соединить две таблицы, сгруппировать объединённые строки и подвести итоги каждой группы с помощью агрегатной функции.
Распространённый отчёт — «сколько потратил каждый клиент?» — соедините клиентов с их заказами, сгруппируйте по клиентам и SUM итоговые суммы.
One row per customer
Reading it in order: join the tables, group the rows by customer, then for each group count the orders and add up the totals.
Одна строка на клиента
SELECT customer.name,
COUNT(*) AS orders,
ROUND(SUM(orders.total), 2) AS spent
FROM customer
INNER JOIN orders ON customer.id = orders.customer_id
GROUP BY customer.id
ORDER BY customer.name;
Читая последовательно: соедините таблицы, сгруппируйте строки по клиентам, затем для каждой группы подсчитайте количество заказов и сложите итоговые суммы.
Common mistakes
- Join first, then
GROUP BYto summarise the joined rows. - Qualify a column with its table name when both tables share it.
Частые ошибки
- Сначала выполните соединение, затем
GROUP BYдля подведения итогов объединённых строк. - Квалифицируйте столбец его именем таблицы, когда обе таблицы содержат одинаковые столбцы.
Joining tables · Объединение таблиц
An inner join drops rows that have no match. · Внутреннее соединение исключает строки, у которых нет совпадения.
For each customer who has orders, show their name, their number of orders as orders, and their total spend (2 d.p.) as spent. Join, group by customer.id, and order by name. · Для каждого клиента у которого есть заказы вывести его имя name, количество заказов как orders и общую сумму расходов (2 знака после запятой) как spent. Выполнить join, сгруппировать по customer.id и отсортировать по name.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
An INNER JOIN hid Ben and Dan, who have no orders. Use a LEFT JOIN to keep every customer, and COUNT(orders.id) so a customer with no orders shows 0. Order by name. · Оператор INNER JOIN скрыл Бена и Дэна, у которых нет заказов. Используйте LEFT JOIN, чтобы сохранить каждого клиента, и COUNT(orders.id), чтобы клиент без заказов отображал 0. Отсортируйте по name.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.