Более сложным вариантом использования соединений INNER/OUTER JOIN представляет их сочетание с выражениями группировки, в частности, с оператором GROUP BY. Например, выведем для каждого покупателя количество заказов, которые он сделал:
SELECT FirstName, COUNT(Orders.Id) FROM Customers JOIN Orders ON Orders.CustomerId = Customers.Id GROUP BY Customers.Id, Customers.FirstName;
Критерием группировки выступают Id и имя покупателя. Выражение SELECT выбирает имя покупателя и количество заказов, используя столбец Id из таблицы Orders.
Так как это INNER JOIN, то в группах будут только те покупатели, у которых есть заказы.
Если нужно получить также и тех покупателей, у которых нет заказов, то можно использовать OUTER JOIN:
SELECT FirstName, COUNT(Orders.Id) FROM Customers LEFT JOIN Orders ON Orders.CustomerId = Customers.Id GROUP BY Customers.Id, Customers.FirstName;
Или выведем товары с общей суммой сделанных заказов:
SELECT Products.ProductName, Products.Company, SUM(Orders.ProductCount * Orders.Price) AS TotalSum FROM Products LEFT JOIN Orders ON Orders.ProductId = Products.Id GROUP BY Products.Id, Products.ProductName, Products.Company;