2009-07-16 69 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;