SQL - объединение двух таблиц и подсчета элементов

Хорошо, я пытаюсь посмотреть, сколько продуктов предоставляется каждым поставщиком (продукты и поставщики являются отдельными таблицами). Я хочу, чтобы результаты отображались с указанием названия компании и количества продуктов, доступных этой компании. Я не уверен, как это настроить.

До сих пор я:

SELECT CompanyName, Count(ProductName) FROM Suppliers 
left join Products on Suppliers.SupplierID = Products.SupplierID;

Я не уверен, как сделать счет ProductName конкретным для каждой компании. Я был бы бесконечно благодарен за любую помощь, которую вы могли бы мне предоставить.

Ответ 1

Все, что вам не хватает, это предложение GROUP BY:

SELECT CompanyName, Count(ProductName)
  FROM Suppliers LEFT JOIN Products
    ON Suppliers.SupplierID = Products.SupplierID
 GROUP BY CompanyName;

Использование LEFT {OUTER} JOIN означает, что если есть поставщики, которые не предоставляют какие-либо продукты, то соединение вернет набор значений NULL для столбцов, соответствующих таблице Products. Затем COUNT (ProductName) подсчитывает только количество ненулевых значений, что дает ответ 0 для компаний, которые не предоставляют никаких продуктов. Очень часто вы будете использовать обычный INNER JOIN, и тогда вы не увидите компаний, которые не предоставляют никаких продуктов.