SQL选择多个匹配的行

时间:2011-05-30 11:51:06

标签: php mysql sql

我有来自不同供应商的产品的SQL数据库,因此相同的产品可能会以不同的价格出现多次。

是否可以选择价格超过4的所有产品,那么所有具有4行以上具有相同ID的行呢?

3 个答案:

答案 0 :(得分:2)

您可以将COUNT(*) AS number_of_products添加到SELECTGROUP BY product_id,然后使用HAVING number_of_products > 4

请注意HAVING应用于结果(它基本上逐个遍历所有结果,并应用条件),因此它将慢于WHERE。如果您有数十万行并且需要性能,请考虑预先计算产品,将索引计数值存储在某处,然后使用简单的WHERE代替。

答案 1 :(得分:1)

是,在您的商品的标识符上进行GROUP,并指定要在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

答案 2 :(得分:0)

对于小组来说,这是完美的事情:

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