MySQL 累计总和给出了错误的结果
MySQL cumulative sum gives wrong result
这是我的 table 样本和一些样本数据-
在计算 gorivo.PovratKM 和 gorivo.PolazakKM 列之间差异的累积和时发生了奇怪的事情,gorivo.UkupnoGorivo 也是如此。
累积总和在 SumUkKM 列中,用于 gorivo.PovratKM 和 [=34= 之间的差异] 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允许为其他table的每一行计算其值。
例如,您可以使用变量设置重置点或分区,与 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
;
这是我的 table 样本和一些样本数据-
在计算 gorivo.PovratKM 和 gorivo.PolazakKM 列之间差异的累积和时发生了奇怪的事情,gorivo.UkupnoGorivo 也是如此。
累积总和在 SumUkKM 列中,用于 gorivo.PovratKM 和 [=34= 之间的差异] 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允许为其他table的每一行计算其值。
例如,您可以使用变量设置重置点或分区,与 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
;