2010-11-02 52 views
10

De acuerdo, estoy tratando de ver cuántos productos proporciona cada proveedor (los productos y proveedores son tablas separadas). Quiero que los resultados se muestren con el nombre de la empresa y la cantidad de productos que la empresa tiene disponibles. No estoy seguro de cómo configurar esto exactamente.SQL - Unir dos tablas y contar elementos

hasta ahora tengo:

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

No estoy seguro de cómo hacer el recuento de ProductName específica para cada empresa. Estaría eternamente agradecido por cualquier ayuda que puedas brindarme.

Respuesta

15

Todo lo que se echa en falta es una cláusula GROUP BY:

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

El uso de IZQUIERDA {EXTERIOR} JOIN significa que si hay proveedores que no realicen más productos, entonces la unión devolverá un conjunto de Valores NULL para las columnas correspondientes a la tabla Productos. El COUNT (ProductName) luego cuenta solo el número de valores no nulos, produciendo la respuesta 0 para las empresas que no ofrecen ningún producto. Muy a menudo, usarías un INNER JOIN regular y luego no verías las compañías que no ofrecen productos.

+0

Guau, estoy avergonzado de mí mismo. ¡Gracias un montón! – tim

+0

Sé que esta es una pregunta antigua, pero ¿cómo se usa una cláusula 'WHERE' con esto, si solo quieres mostrar los registros donde el recuento de ProductName es inferior a 10, por ejemplo? – Clay

+0

Interpretado literalmente, debe escribir la consulta original como una subconsulta: 'SELECT CompanyName, ProductCount FROM (SELECT CompanyName, COUNT (ProductName) AS ProductCount DE Proveedores LEFT JOIN Productos EN Suppliers.SupplierID = Products.SupplierID GROUP BY CompanyName) COMO DONDE ProductCount <10'. Sin embargo, la cláusula HAVING sería apropiada, después de la cláusula GROUP BY, en la consulta básica: 'HAVING COUNT (ProductName) <10'. –

Cuestiones relacionadas