2011-05-30 101 views
1

我有一個來自不同供應商的產品的SQL數據庫,因此同一個產品可能會以不同的價格出現多次。SQL選擇多個匹配行

是否有可能選擇所有具有4個以上價格的產品,因此基本上所有具有相同ID的4行以上的行?

回答

1

是,集團在識別器爲您的項目,並指定價格的數量在HAVING子句中算,這樣的事情:

SELECT ItemID, COUNT(Price) FROM itemTBL GROUP BY ItemID HAVING COUNT(Price) >= 4 

然後,您可以用它來後過濾器,並獲得更多信息:

SELECT Item.*, Category.Name, Filter.NumPrices from itemTBL AS Item 
INNER JOIN categoryTBL as Category ON Item.CategoryID = Category.CategoryID 
INNER JOIN (SELECT ItemID, COUNT(Price) AS NumPrices FROM itemTBL GROUP BY ItemID HAVING COUNT(Price) >= 4) AS Filter on Item.ItemID = Filter.ItemID 
+0

正是我需要的,謝謝 – 2011-05-30 12:32:16

2

您可以將COUNT(*) AS number_of_products添加到SELECT,GROUP BY product_id,然後使用HAVING number_of_products > 4

請注意,HAVING應用於結果(它基本上遍歷所有結果,一個接一個地應用條件),所以它會比WHERE慢。如果您有成千上萬行並且需要性能,請考慮對產品進行預先計數,將索引計數值存儲在某處,然後使用簡單的WHERE代替。

+0

聽起來不錯 - 不要用p不忘組產品編號 – tjmw 2011-05-30 11:56:48

+0

好的,謝謝,更新了答案。 – rid 2011-05-30 11:58:28

0

這是一組完美的東西是:

SELECT ProductID, COUNT(*) AS PriceCount 
FROM Product GROUP BY 
Product,Price HAVING COUNT(Product) > 4