我有一个包含两个订单(orderID 1
和 orderID 2
)的订单信息的表:
┌--------------------------------------┐
| orderID | productID | amount | price |
├--------------------------------------┤
| 1 | 1 | 5 | 19.95 |
| 1 | 2 | 2 | 12.95 |
| 1 | 3 | NULL | 3.49 |
| 1 | 4 | NULL | 1.49 |
| 1 | 5 | NULL | 0.99 |
| 2 | 1 | 11 | 19.95 |
| 2 | 2 | 4 | 12.95 |
| 2 | 3 | NULL | 3.49 |
└--------------------------------------┘
产品 ID 1
和 2
是商品,订购者可以选择任意数量的商品。
所有ID大于2
的产品都会升级到产品ID1
,因此订购者无法选择数量,只能选择或不选择。
现在我想计算每个订单的最终 SUM()
。
第一个订单的正确公式是
5 * 19.95
+ 2 * 12.95
+ 5 * 3.49
+ 5 * 1.49
+ 5 * 0.99
-----------
= 155.50
所以我开始像这样定义我的查询:
SELECT
`orderID`,
SUM(
CASE
WHEN `amount` IS NOT NULL
THEN `amount` * `price`
ELSE `price`
END
) AS `total`
FROM `orders`
GROUP BY `orderID`
但现在的问题是,所有可选项目(productID > 2
)仅计算一次,但我需要它们的次数与选择 productID 1
的次数一样多。如何在查询中访问 productID 1
的amount
?
最佳答案
我认为您需要 self 加入。像这样的事情:-
SELECT a.OrderID, SUM(COALESCE(a.amount, b.amount) * a.price)
FROM orders a
INNER JOIN orders b
ON a.OrderID = b.OrderID
AND b.ProductID = 1
GROUP BY a.OrderID
关于mysql - 如何在我的查询中正确 SUM() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27058635/