问题求解:在MYSQL中,对表的一列数字进行分组循环累加

问题求解:在MYSQL中,对表的一列数字进行分组循环累加



问题同

http://topic.csdn.net/u/20070717/07/1a2b9317-eec7-453d-8698-044237e47086.html

有这样的原始表: 
X1 X2 
----------------------- 
2 453 
2 120 
2 101 
2 89 
3 111 
3 421 
3 219 
----------------------- 

根据X1字段进行累加,我要循环累加后变成下面的表 
X1 X2 
----------------------- 
2 453 
2 573 
2 674 
2 763 
3 111 
3 532 
3 751 
----------------------- 


/////////////////////////////////////////////////
原贴2楼Haiwer的解决方案:


declare @X1 int 
declare @X2 int 

select * into # 
from 原始表 
order by x1 

update # 
 set @x2=case when @x1 is null or @x1 <> x1 then x2 else @x2+x2 end, 
 @x1=x1, 
 x2=@x2 

select * from # 

drop table # 
/////////////////////////////////////////////////

这段代码适用于MS SQL,但MYSQL中的UPDATE貌似不支持set @变量名=字段名这种写法,求各位帮忙(如何改写能够兼容MYSQL)。






省时省力代码:
SQL code




CREATE TABLE temptb(
`x1` INT NULL NULL ,
`x2` INT NULL NULL ,
`cumulative_sum` INT NULL NULL);


INSERT INTO temptb VALUES(2,453,0);
INSERT INTO temptb VALUES(2,120,0);
INSERT INTO temptb VALUES(2,101,0);
INSERT INTO temptb VALUES(2,89,0);
INSERT INTO temptb VALUES(3,111,0);
INSERT INTO temptb VALUES(3,421,0);
INSERT INTO temptb VALUES(3,219,0);





作者: cdcorg   发布时间: 2011-05-25

SQL code


CREATE TABLE test
(
    Id INT NOT NULL AUTO_INCREMENT,
    X1 INT NOT NULL,
    X2 INT NOT NULL,
PRIMARY KEY(`Id`)
)

INSERT  INTO test(X1,X2) VALUES(2,453),(2,120),(2,101),(2,89),(3,111),(3,421),(3,219)

SELECT * FROM test


SELECT X1,(SELECT SUM(X2) FROM test WHERE X1=A.X1 AND Id<=A.Id)
FROM test A

-----------------------

X1    (SELECT SUM(X2) from test where X1=A.X1 and Id<=A.Id)
2    453
2    573
2    674
2    763
3    111
3    532
3    751


作者: yananguo_1985   发布时间: 2011-05-25