2011-03-28 46 views
2

我有一個查詢,返回是這樣的:MySQL的選擇功能來概括當前的數據

| ID | Val | 
| 0 | 10 |  
| 1 | 20 |  
| 2 | 30 | 

的而是說,我想是這樣的:

| ID | Val | Sum | 
| 0 | 10 | 10 | 
| 1 | 20 | 30 | 
| 2 | 30 | 60 | 

那是一個辦法在查詢上執行它(我正在使用MySQL)?

韓國社交協會

+0

發佈您的查詢 – 2011-03-28 16:42:02

回答

7

這被稱爲累計和。

OraclePostgreSQL,它使用窗函數計算公式爲:

SELECT id, val, SUM() OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
FROM mytable 

但是,MySQL不支持它。

MySQL,您使用會話變量可以計算出它:

SET @s = 0; 

SELECT id, val, @s := @s + val 
FROM mytable 
ORDER BY 
     id 
; 

或在純集爲基礎,但效率較低的方式:

SELECT t1.id, t1.val, SUM(t2.val) 
FROM mytable t1 
JOIN mytable t2 
ON  t2.id <= t1.id 
GROUP BY 
     t1.id 
; 
3

會是這樣的工作你的目的是什麼? (警告,使用子選擇可能真的很慢)。

SELECT t1.id, t1.val, (SELECT SUM(val) FROM table AS t2 WHERE t2.id <= t1.id) 'sum' 
    FROM table AS t1 
    ORDER BY id ASC 
0

假設表名是T,你可以使用像這樣的查詢:

select t.id, t.val, sum(t2.val) Sum 
    from t, t t2 
where t2.id <= t.id 
group by t.id, t.val 

(在Oracle測試)