我有来自不同供应商的产品的SQL数据库,因此相同的产品可能会以不同的价格出现多次。
是否可以选择价格超过4的所有产品,那么所有具有4行以上具有相同ID的行呢?
答案 0 :(得分:2)
您可以将COUNT(*) AS number_of_products
添加到SELECT
,GROUP 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