Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在我的查询中正确求和()?_Mysql_Sum - Fatal编程技术网

Mysql 如何在我的查询中正确求和()?

Mysql 如何在我的查询中正确求和()?,mysql,sum,Mysql,Sum,我在此表中有一个包含两个订单的订单信息(orderid1和orderid2): 产品ID1和2是项目,订购方可以在其中选择任意数量的项目 ID大于2的所有产品都升级为产品ID1,因此订购方无法选择金额,只能选择或不选择金额 现在我想计算每个订单的最终SUM() 一阶的正确公式是 5 * 19.95 + 2 * 12.95 + 5 * 3.49 + 5 * 1.49 + 5 * 0.99 ----------- = 155.50 所以我开始这样定义我的查询: SELECT

我在此表中有一个包含两个订单的订单信息(
orderid1
orderid2
):

产品ID
1
2
是项目,订购方可以在其中选择任意数量的项目

ID大于
2
的所有产品都升级为产品ID
1
,因此订购方无法选择金额,只能选择或不选择金额

现在我想计算每个订单的最终
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

我想您需要一个自动加入。大概是这样的:-

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

我发现很难理解为什么,但它是有效的;谢谢它靠着自己把桌子连接起来。orders(a)是每行,orders(b)只是该订单的第一个产品id。Coalesce给出了第一个非空值,所以如果a有一个数量,它就使用它,如果没有,它就使用b的数量。我明白了,太神奇了!谢谢!我刚刚看到它不会返回
product1=NULL
的行。如何获取
product1=NULL而
product2>0
的行?不确定使用左外部联接是否可以自行完成。取决于您是否希望处理产品id为2、3和4的情况,并希望在其为空时使用2表示3和4的数量。
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