我有一個查詢,返回是這樣的:MySQL的選擇功能來概括當前的數據
| ID | Val |
| 0 | 10 |
| 1 | 20 |
| 2 | 30 |
的而是說,我想是這樣的:
| ID | Val | Sum |
| 0 | 10 | 10 |
| 1 | 20 | 30 |
| 2 | 30 | 60 |
那是一個辦法在查詢上執行它(我正在使用MySQL)?
韓國社交協會
我有一個查詢,返回是這樣的:MySQL的選擇功能來概括當前的數據
| ID | Val |
| 0 | 10 |
| 1 | 20 |
| 2 | 30 |
的而是說,我想是這樣的:
| ID | Val | Sum |
| 0 | 10 | 10 |
| 1 | 20 | 30 |
| 2 | 30 | 60 |
那是一個辦法在查詢上執行它(我正在使用MySQL)?
韓國社交協會
這被稱爲累計和。
在Oracle
和PostgreSQL
,它使用窗函數計算公式爲:
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
;
會是這樣的工作你的目的是什麼? (警告,使用子選擇可能真的很慢)。
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
假設表名是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測試)
發佈您的查詢 – 2011-03-28 16:42:02