mysql - 如何在我的查询中正确 SUM() ?

标签 mysql sum

我有一个包含两个订单(orderID 1orderID 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 12 是商品,订购者可以选择任意数量的商品。

所有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 1amount

最佳答案

我认为您需要 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/

相关文章:

MYSQL从另一个具有多个条目的表更新

MySQL 计数/求和字段

Java返回空列表而不是对象

javascript - 如何在时间复杂度为 Big O(N) 的循环内对数组部分求和

jsp - 使用derby,netbeans和jsp在两列中添加值并存储到第三列中?

mysql - 一个 SQL 语句中的两个不同分组

c - 数组的整数子集的总和,获取所有结果而不是第一个

java - 我可以使用 MySQL Connector/J 执行以分号分隔的多个查询吗?

php - MySQLi multi_query 不会返回超过 1 个结果

mysql - 将 SQL 数据库更新为 Wordpress 日期格式