1

我正在尝试创建一个查询,其中我SUM是一列,但如果一列包含某个值,则SUM必须在该点重置该值以获取该值。

IE:

SUM(i.units * op.add_or_subtract)   // This would translate to: '50 * -1' or '50 * 1'

这个想法是,如果op.op_code = 9,该SUM值应该重置为当前值,i.units因为已经进行了手动调整。

op_code | units | add_or_subtract | SUM value |
--------|-------|-----------------|------------
   1    |   50  |       1         |     50
   1    |   50  |       1         |    100
   4    |   30  |      -1         |     70
   9    |  225  |       0         |    225

等等等等

任何人都可以帮助我如何(如果可以的话)在 MySQL 中实现这一点吗?

4

2 回答 2

1

尝试

select *, case when op_code = 9
               then @s := units
               else (@s := @s + (units * add_or_subtract)) 
          end as sum
from your_table, (select @s := 0) st
于 2012-08-07T09:16:30.497 回答
0

尝试这个:

SELECT SUM(IF(op_code = 9, (@var_sum := units), 
                           ((@var_sum := @var_sum + units) * add_or_subtract) 
          ) as sum_value
FROM table_name, (SELECT @var_sum := 0) a;
于 2012-08-07T09:15:42.483 回答