除了“累积”专栏之外,我不确定该怎么称呼它。
我有一个MySQL表,其列显示为
+---+
|val|
+---+
| 1 |
| 4 |
| 6 |
| 3 |
| 2 |
| 5 |
+---+
我想进行查询,以便将此列与另一列一起获取,该列是目前为止此列中所有行的总和。换句话说,select会产生
+---+----+
|val| sum|
+---+----+
| 1 | 1 |
| 4 | 5 |
| 6 | 11 |
| 3 | 14 |
| 2 | 16 |
| 5 | 21 |
+---+----+
有谁知道我会怎么做,以及你是否可以在MySQL中这样做?
答案 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