问题求解:在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
问题同
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