2011-05-30 96 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