2009-07-16 73 views
7

我不知道除了“累积”列之外还要调用什么。MySQL选择“累积”列

我有,看起来像

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

我想做一个查询,使我与另一列是所有行的此列总和相处此列一列一个MySQL表,远。换句话说,选择会产生

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

有谁知道我会怎么做,以及是否可以在MySQL做到这一点?

回答

7

什么

set @running_sum=0 
select val, @running_sum:[email protected]_sum + val from your_table; 

我是新来的mysql所以要我说的话用一粒盐。

你想要什么叫做运行总和。有一些google results

0

我不知道\如果你想用一个select来做到这一点,但我认为你可以选择元素,然后在第二遍中有一个光标'accumulate'。

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 
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;