MySQL查询问题

时间:2011-02-10 07:45:31

标签: 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查询将在event_type中累积total的值。因此,该表将如下所示:

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 个答案:

答案 0 :(得分: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中保存此计算并不常见,特别是如果db是OLTP数据库。

答案 1 :(得分: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;