2017-02-19 50 views
0

這裏是我的table樣品一些樣品,同時使列gorivo.PovratKM和gorivo.PolazakKM和同爲gorivo.UkupnoGorivo之間的差異累積和數據 -MySQL的累計總和給出錯誤的結果

奇怪的事情發生。

的累加和在柱SumUkKM爲差gorivo.PovratKMgorivo.PolazakKM之間以及用於累加和爲gorivo.UkupnoGorivo柱SumGorivo

輸出應該是這樣的:

+-------------+------------+-------------+------------+ 
| Polazak KM | Povratal KM| Prijedeno KM| SumUkKM | 
+-------------+------------+-------------+------------+ 
| 814990  | 816220  |  1230 | 1230 |     
+-------------+------------+-------------+------------+ 
| 816220  | 817096  |  876 | 2106 |     
+-------------+------------+-------------+------------+ 
| 817096  | 817124  |  28  | 2134 |     
+-------------+------------+-------------+------------+ 
| 817124  | 818426  |  1302 | 3436 |     
+-------------+------------+-------------+------------+ 

我在做什麼錯在我的查詢?

回答

2

MySql允許聲明sql語句中的變量,(select @SumUkGorivo := 0, @SumUkKM := 0) x CROSS JOIN允許爲另一個表的每一行計算其值。

使用變量,例如,您可以設置重置點或分區的方式與SUM() OVER (PARTITION BY相同,但由其他dmbs如SQL或Postgres使用。

SELECT 
    y.`PolazakKM`, y.`PovratakKM`, 
    @SumUkGorivo := @SumUkGorivo + `UkupnoGorivo` as SumUkGorivo, 
    @SumUkKM := @SumUkKM + (y.`PovratakKM` - y.`PolazakKM`) as SumUkKM 
FROM 
    (select @SumUkGorivo := 0, @SumUkKM := 0) x, 
    (select gorivo.`PolazakKM`, gorivo.`PovratakKM`, gorivo.`UkupnoGorivo` 
    from gorivo WHERE gorivo.`IDVozilo` = 131 
    order by `DatumT`) y 
; 
+0

非常感謝!我沒有想法可以通過這種方式解決。 – Josef

+0

我很高興能夠提供幫助。 – McNets

+0

@McNets在SQL中執行循環很有趣。你能否分解這個查詢的行爲?你也可以解釋一下'(選擇@SumUkGorivo:= 0,@SumUkKM:= 0)x,'是否被註釋掉? - '@ SumUkkm'以9854(這是差異的最後總和)開始,而不是0.所以它就像11084(9854 + 1230),11960(9854 + 1230 + 876)...爲什麼? – user104309