簡體   English   中英

MySQL選擇“累積”列

[英]MySQL select “accumulated” column

除了“累積”專欄之外,我不確定該怎么稱呼它。

我有一個MySQL表,看起來像一個列

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

我想進行一個查詢,以便我將此列與另一列一起獲取,該列是到目前為止此列中所有行的總和。 換句話說,選擇會產生

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

有誰知道我會怎么做,以及你是否可以在MySQL中這樣做?

關於什么

set @running_sum=0
select val, @running_sum:=@running_sum + val from your_table;

我是mysql的新手,所以我帶着一點點的話說。

你想要的是一個運行總和。 有一些谷歌的結果

另一種變化(單行)可以

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;

我不知道如果你用一個選擇你會這么做但我認為你可以選擇元素然后在第二遍傳遞'累積'。

我會用一個游標

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM