MySQL选择"累积"列

Mar*_*ang 7 mysql

除了"累积"专栏之外,我不确定该怎么称呼它.

我有一个MySQL表,看起来像一个列

+---+
|val|
+---+
| 1 |
| 4 |
| 6 |
| 3 |
| 2 |
| 5 |
+---+
Run Code Online (Sandbox Code Playgroud)

我想进行一个查询,以便我将此列与另一列一起获取,该列是到目前为止此列中所有行的总和.换句话说,选择会产生

+---+----+
|val| sum|
+---+----+
| 1 |  1 |
| 4 |  5 |
| 6 | 11 |
| 3 | 14 |
| 2 | 16 |
| 5 | 21 |
+---+----+
Run Code Online (Sandbox Code Playgroud)

有谁知道我会怎么做,以及你是否可以在MySQL中这样做?

set*_*eth 7

关于什么

set @running_sum=0
select val, @running_sum:=@running_sum + val from your_table;
Run Code Online (Sandbox Code Playgroud)

我是mysql的新手,所以我带着一点点的话说.

你想要的是一个运行总和.有一些谷歌的结果.


小智 5

另一种变化(单行)可以

SELECT val, @sm := @sm + val AS sum
  FROM myTable, (SELECT @sm := 0) r;
Run Code Online (Sandbox Code Playgroud)

如果您不想使用变量,可以使用嵌套选择,但请注意,此查询具有更高的复杂性(性能较低),您必须设置并锚定排序,在我的示例中,我使用_rowid,但任何其他字段都可以完成工作

  SELECT x1.val, (SELECT sum(val)
                    FROM myTable
                   WHERE id <= x1._rowid)
                    AS sum
    FROM myTable AS x1
ORDER BY _rowid;
Run Code Online (Sandbox Code Playgroud)