2012-12-05 162 views
0

我有一張表格,裏面包含我們銷售的所有物品。訂單中可能有多個項目。選擇具有唯一值的行數

我想找到訂單中只包含1件商品的最受歡迎的商品顏色組合。 我想知道是否有可能在一個MySQL語句中找到它(也許使用嵌套選擇)。到目前爲止,我嘗試了幾件事情,但都沒有成功。

ProductName | Color | OrderNum | 
-------------------------------- 
productA | black | 1 
productA | black | 1 
productA | black | 2 
productA | black | 3 
productA | black | 4 
productA | black | 4 
productA | black | 5 

所以「

SELECT COUNT(ProductName), ProductName WHERE ~~COUNT(OrderNum)=1~~ GROUP BY ProductName, Color 

會顯示:

COUNT(ProductName) | ProductName | Color 
     3   | ProductA | black 

在現實中我的產品和超過50種顏色的分數

我已經試過:

SELECT COUNT(ProductName), ProductName,Color, 
     (SELECT COUNT(OrderNum) FROM Items GROUP BY OrderNum) AS itemcount 
FROM Items WHERE 1 
GROUP BY ProductName,Color HAVING itemcount = 1 

SELECT COUNT(ProductName) , ProductName, Color 
FROM Items 
WHERE (SELECT COUNT(OrderNum) AS itemcounts 
     FROM Items GROUP BY OrderNum 
) =1 
GROUP BY ProductName 

- 「子查詢返回多於一行」

感謝您的幫助。

回答

2

查詢:

SQLFIDDLEExample

SELECT 
COUNT(*) as count, i.ProductName, i.Color 
FROM ITems i 
WHERE 1 = (SELECT COUNT(OrderNum) AS itemcounts 
      FROM Items 
      WHERE OrderNum = i.OrderNum 
      ) 
GROUP BY ProductName, Color 

結果:

| COUNT | PRODUCTNAME | COLOR | 
------------------------------- 
|  3 | productA | black | 
+0

工作。謝謝!究竟發生了什麼? '我'是臨時表嗎? – TimSum

+0

不,它不是臨時表。只需要每個Ordernum並檢查count是否爲1 :) – Justin

0

試試這個:

SELECT ProductName, color, COUNT(ProductName) 
FROM (SELECT ProductName, color, orderNum FROM Items 
     GROUP BY ProductName, orderNum HAVING COUNT(orderNum)=1) AS A 
+0

這隻能返回一個結果。而且數量遠遠高於正確的數字。 – TimSum

+0

你能舉例說明這個問題嗎? –