问题求解:在MYSQL中,对表的一列数字进行分组循环累加
时间:2011-05-25
来源:互联网
问题求解:在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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28