成本平均A组内的负数量

时间:2016-01-29 20:33:20

标签: mysql

我已阅读了许多有关生成库存成本平均值的SO帖子,但您如何处理数量字段中存在负值的情况?

据我所知,使用以下逻辑,mysql不会考虑结果的顺序。它不知道在最后2000个苹果数量输入之前,总数量是0,这是最终2000苹果11.33'的成本基础。

有没有办法在单个查询中处理此问题,或者是按顺序执行的步骤函数?

SELECT 

    fruit,
    SUM(quantity) as quantity,
    SUM(quantity*price)/SUM(quantity)

FROM products 
GROUP BY fruit");

以下是产品样本表 -

 +--------+----------+---------+
 | id | fruit  | quantity | price   |
 +----+--------+----------+---------+
 |  1 | grapes |     2000 | 13.0900 |
 |  2 | apples |     1000 | 10.8900 |
 |  3 | grapes |      100 | 12.6000 |
 |  4 | grapes |      100 | 12.6800 |
 |  5 | apples |    -1000 | 11.2800 |
 |  6 | grapes |     2200 | 12.4300 |
 |  7 | grapes |    -4400 | 12.4300 |
 |  8 | apples |     2000 | 11.3300 |
 |  9 | apples |    -2000 | 11.3200 |
 | 10 | apples |     2000 | 11.3300 |
 +----+--------+----------+---------+

价格列显示交易价格。如负值所示,在同一列(数量)中有买入和卖出。

每个水果的产量应为一行,数量和平均价格。在这个例子中,返回应该包括“#11; 11.33”中的苹果,但是我要显示 11.15'因为股票价格被取消了。

 +--------+----------+---------+
 | fruit  | quantity | price   |
 +--------+----------+---------+
 | grapes |        0 | 00.0000 |
 | apples |     2000 | 11.3300 |
 +--------+----------+---------+

1 个答案:

答案 0 :(得分:0)

我猜你的价值只是卖/买,你想要的是交易量的总和。现在,如果你想要一些有库存股票的东西,你需要提供一个更好的公式解释。

使用IF expresion更改为正确的值

SELECT     
    fruit,
    SUM( IF(quantity>0, quantity, -quantity) ) as quantity,
    SUM( IF(quantity>0, quantity, -quantity) * price) 
     / SUM( IF(quantity>0, quantity, -quantity) )

FROM products 
GROUP BY fruit
HAVING SUM(quantity) != 0
ORDER BY fruit ASC");