MySQL的累计总和给出错误的结果
问题描述:
这里是我的table样品一些样品,同时使列gorivo.PovratKM和gorivo.PolazakKM和同为gorivo.UkupnoGorivo之间的差异累积和数据 -MySQL的累计总和给出错误的结果
奇怪的事情发生。
的累加和在柱SumUkKM为差gorivo.PovratKM和gorivo.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 |
+-------------+------------+-------------+------------+
我在做什么错在我的查询?
答
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
;
非常感谢!我没有想法可以通过这种方式解决。 – Josef
我很高兴能够提供帮助。 – McNets
@McNets在SQL中执行循环很有趣。你能否分解这个查询的行为?你也可以解释一下'(选择@SumUkGorivo:= 0,@SumUkKM:= 0)x,'是否被注释掉? - '@ SumUkkm'以9854(这是差异的最后总和)开始,而不是0.所以它就像11084(9854 + 1230),11960(9854 + 1230 + 876)...为什么? – user104309