2013-03-29 73 views
3

表 - 產品擁有的產品數量如下在編寫SQL查詢時需要幫助

╔═══════════╦═════════════╗ 
║ PRODUCTID ║ PRODUCTNAME ║ 
╠═══════════╬═════════════╣ 
║   1 ║ Nokia  ║ 
║   2 ║ Samsung  ║ 
║   3 ║ BlackBerry ║ 
╚═══════════╩═════════════╝ 

表 - SalesPersonProduct有如下記錄

╔═══════════════╦═══════════╗ 
║ SALESPERSONID ║ PRODUCTID ║ 
╠═══════════════╬═══════════╣ 
║ S1   ║   1 ║ 
║ S1   ║   2 ║ 
║ S1   ║   3 ║ 
║ S2   ║   1 ║ 
║ S3   ║   2 ║ 
╚═══════════════╩═══════════╝ 

編寫返回一個SQL查詢已銷售產品的總數量?

+3

真棒桌面顯示器!你是怎麼做到的? – Jess

回答

2

這應該是非常簡單的。你需要先加入兩個表。下面的查詢使用LEFT JOIN,因爲它包括在左手邊表,該表Products即使它在右邊表是SalesPersonProduct匹配的記錄或無的所有記錄。

記錄加入後,您現在可以使用COUNT()這是一個集合函數來計算每個組的記錄數。

由於查詢使用的是LEFT JOIN,因此表SalesPersonProduct上沒有匹配記錄的所有記錄在列TotalSold上的值將爲zero

SELECT a.ProductID, 
     a.ProductName, 
     COUNT(b.ProductID) TotalSold 
FROM Products a 
     LEFT JOIN SalesPersonProduct b 
      ON a.ProductID = b.ProductID 
GROUP BY a.ProductID, 
      a.ProductName 

輸出

╔═══════════╦═════════════╦═══════════╗ 
║ PRODUCTID ║ PRODUCTNAME ║ TOTALSOLD ║ 
╠═══════════╬═════════════╬═══════════╣ 
║   1 ║ Nokia  ║   2 ║ 
║   2 ║ Samsung  ║   2 ║ 
║   3 ║ BlackBerry ║   1 ║ 
╚═══════════╩═════════════╩═══════════╝ 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

1

如果你只是想返回FO銷售的總數量,那麼你可以很容易地通過在SalesPersonProduct表計數的行做到這一點:

select count(productid) TotalProducts 
from SalesPersonProduct; 

但如果你想銷售的總人數每一個產品,那麼你就需要JOINproductId列的表:

select p.productname, count(s.productid) TotalSales 
from products p 
left join SalesPersonProduct s 
    on p.productid = s.productid 
group by p.productname 

SQL Fiddle with Demo

JOIN版本中,我關閉了一個LEFT JOIN,它將返回所有產品名稱,即使它沒有銷售。在您的樣本數據,如果你加入蘋果的產品名稱,然後你將返回以下結果與LEFT JOIN:

| PRODUCTNAME | TOTALSALES | 
---------------------------- 
|  Apple |   0 | 
| BlackBerry |   1 | 
|  Nokia |   2 | 
|  Samsung |   2 |