2011-02-10 240 views
1

我有一個包含很多行的MySQL表。表結構如下:MySQL查詢問題

id: bigint, 
event_type: int, 
total: int 

樣本數據:

id event_type total 
1  1   NULL 
2  -1   NULL 
3  1   NULL 
4  1   NULL 
5  1   NULL 
6  -1   NULL 
7  -1   NULL 
8  -1   NULL 

的EVENT_TYPE將或者1-1total將初始設置爲NULL。是否有任何簡單的SQL查詢將在total中累積event_type的值。因此,該表將是這樣的:

id event_type total 
1  1   1 
2  -1   0 
3  1   1 
4  1   2 
5  1   3 
6  -1   2 
7  -1   1 
8  -1   0 

此外,total列可以部分計算。換句話說,我需要在表格仍然被修改時(通過插入)來運行查詢。我知道它可以使用PHP或Perl代碼完成。但是,僅使用SQL查詢就可以。

+2

你想要一個跑步總和?爲什麼你不只是SUM(event_type)並且使用LIMIT來定義你想要的行數 – 2011-02-10 07:47:43

回答

1

由於確實MySql不允許更新您正在讀取的表格,因此可以使用臨時表格進行更新。

CREATE TABLE temp AS SELECT a.id, SUM(b.event_type) AS tot 
FROM your_table a 
LEFT JOIN your_table b ON b.id <= a.id 
GROUP BY a.id; 

UPDATE your_table,temp 
SET your_table.total = temp.tot 
WHERE your_table.id = temp.id; 

DROP TABLE temp; 
1
UPDATE table t JOIN (
    SELECT m.id, @RunTotal := @RunTotal + event_type RunTotal 
    FROM table m, (SELECT @RunTotal := 0) dk 
    ORDER BY m.id 
) rs ON t.id = rs.id 
SET t.Total = rs.RunTotal 

正如cherouvim已經在評論中指出,這是罕見的保存此計算在db,特別是如果該數據庫是一個OLTP數據庫。