Группировка в соединениях

Последнее обновление: 24.03.2018

Более сложным вариантом использования соединений 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;
Группировка в INNER JOIN в PostgreSQL

Критерием группировки выступают 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;
Группировка в OUTER LEFT JOIN в PostgreSQL

Или выведем товары с общей суммой сделанных заказов:

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;
GROUP BY и JOIN в PostgreSQL
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850