Mysql的递归从其减去和分组值乘以(Mysql recursive substracting an

2019-10-19 17:04发布

无法真正说明我的问题的话,而是用一个例子,我可以清楚地表现出来:

我有这样一个表:

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

我想通过所有的行,并计算出“民”的增加,乘用“VAL”值差异。 当我计算了所有的这些,我想基于“标志”值添加这些结果在一起,但分组。

这是数学公式,我想在桌子上运行:

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

78  = Result_1
150 = Result_2

谢谢。

Answer 1:

有趣的问题。 不幸的是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
  • SQL小提琴演示


文章来源: Mysql recursive substracting and multiplying grouped values