MySQL选择“累积”列

时间:2009-07-16 05:51:54

标签: mysql

除了“累积”专栏之外,我不确定该怎么称呼它。

我有一个MySQL表,其列显示为

+---+
|val|
+---+
| 1 |
| 4 |
| 6 |
| 3 |
| 2 |
| 5 |
+---+

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

+---+----+
|val| sum|
+---+----+
| 1 |  1 |
| 4 |  5 |
| 6 | 11 |
| 3 | 14 |
| 2 | 16 |
| 5 | 21 |
+---+----+

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

4 个答案:

答案 0 :(得分:7)

怎么样?
set @running_sum=0
select val, @running_sum:=@running_sum + val from your_table;

我是mysql的新手,所以拿一点我说的话。

你想要的是一个运行总和。有一些google results

答案 1 :(得分:5)

另一种变化(单行)可以是

SELECT val, @sm := @sm + val AS sum
  FROM myTable, (SELECT @sm := 0) r;

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

  SELECT x1.val, (SELECT sum(val)
                    FROM myTable
                   WHERE id <= x1._rowid)
                    AS sum
    FROM myTable AS x1
ORDER BY _rowid;

答案 2 :(得分:0)

我不知道你是如何用一个选择做的,但是我认为你可以选择元素,然后在第二遍中有一个光标'累积'。

答案 3 :(得分:0)

我会使用 cursor

>>> import MySQLdb
>>> db = MySQLdb.connect("localhost","username","password","test")
>>> cur = db.cursor()
>>> cur.execute("select myval from mytable")
>>> rs = cur.fetchall()
>>> accumulator = 0
>>> for r, in rs:
...   accumulator += r
...   print r, accumulator
...
1 1
4 5
6 11
3 14
2 16
5 21