【发布时间】:2011-04-06 11:43:54
【问题描述】:
我有一个存储产品价格信息的表格。它有一个产品 ID 列、一个数量和一个折扣。 (用户购买 2 件可获得 1 英镑的折扣,购买 3 件可获得 2 英镑的优惠等)。
我想提取所有具有特定数量折扣的产品。例如,仅分别购买 1,2 或 3 可享受 5 英镑、10 英镑和 20 英镑折扣的产品。
我该怎么做?
我想按产品 ID 分组,其中有三行符合我的条件 - 没有其他产品。
【问题讨论】:
我有一个存储产品价格信息的表格。它有一个产品 ID 列、一个数量和一个折扣。 (用户购买 2 件可获得 1 英镑的折扣,购买 3 件可获得 2 英镑的优惠等)。
我想提取所有具有特定数量折扣的产品。例如,仅分别购买 1,2 或 3 可享受 5 英镑、10 英镑和 20 英镑折扣的产品。
我该怎么做?
我想按产品 ID 分组,其中有三行符合我的条件 - 没有其他产品。
【问题讨论】:
未经测试(取决于您的架构),但想法如下:
SELECT P.id, count(P.id)
FROM products P
LEFT JOIN discounts D ON P.id = D.product_id
WHERE
(D.quantity = 1 AND D.amount = 5)
OR (D.quantity = 2 AND D.amount = 10)
OR (D.quantity = 3 AND D.amount = 20)
GROUP BY P.id
HAVING count(P.id) = 3
【讨论】:
这是 SQL Server 的查询,可能对 MySql 有一些调整,但这是基础。
SELECT * FROM <TABLE> WHERE ProductId in
(SELECT ProductId
FROM <TABLE>
GROUP BY ProductId
HAVING COUNT(ProductId) = 3)
【讨论】:
我最终得到了
SELECT * FROM table WHERE ProductID IN
(SELECT ProductId
FROM table
WHERE (qty = X AND price = X) OR (qty = X AND price = X) OR (qty = X AND price = X)
GROUP BY ProductID
HAVING COUNT(ProductID) = 3)
GROUP BY productID
ORDER BY productID, qty
这给了我需要的过滤。谢谢你让我开始!
【讨论】: