Mysql递归减法和乘法分组值

时间:2014-03-29 02:30:03

标签: mysql join recursion sum

无法用言语解释我的问题,但举个例子我可以清楚地说明:

我有一张这样的表:

id    num   val  flag
0     3     10   1
1     5     12   2
2     7     12   1
3     11    15   2

我想要遍历所有行,并计算" num"的增加,并将该差值乘以" val"值。当我计算所有这些时,我想将这些结果一起添加,但是基于"标记"值。

这是我想在桌子上运行的数学方程式:

Result_1 = (3-0)*10 + (7-3)*12
Result_2 = (5-0)*12 + (11-5)*15

78  = Result_1
150 = Result_2

谢谢。

1 个答案:

答案 0 :(得分:2)

有趣的问题。很遗憾,MYSQL不支持recursive queries,因此您需要在这里有点创意。这样的事情可以奏效:

select flag,
  sum(calc)
from (
  select flag, 
    (num-if(@prevflag=flag,@prevnum,0))*val calc,
    @prevnum:=num prevnum,
    @prevflag:=flag prevflag
  from yourtable 
    join (select @prevnum := 0, @prevflag := 0) t
  order by flag
  ) t
group by flag