2014-03-29 42 views
1

真的無法解釋我的問題用語言,而是用一個例子,我可以清楚地顯示:Mysql的遞歸從其減去再乘以分組值

我有這樣的一個表:

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 

謝謝。

回答

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 
+0

這是工作,謝謝。 – Sevron