2011-02-10 4 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 또는 -1이 될 것이다. total은 처음에 NULL으로 설정됩니다. totalevent_type의 값을 누적하는 간단한 SQL 쿼리가 있습니까?

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 또는 펄 코드를 사용하여 수행 할 수 있습니다 알아요. 그러나 SQL 쿼리 만 사용하면 좋을 것입니다.

+2

누적 합계를 원하십니까? 왜 그냥 SUM (event_type)을 사용하지 않고 LIMIT을 사용하여 원하는 행 수를 늘려야합니까? –

+2

왜이 작업을 수행해야합니까? 관계형 모델에 맞지 않는 것 같습니다. – cherouvim

+0

이 값을 그래프로 나타냅니다. 당신은 이것을하는 더 좋은 방법을 제안합니까? – Khaled

답변

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 데이터베이스입니다 특별히 경우, DB에이 계산을 저장 드물다.