基于ID在MySQL中创建累积和列
我有一个简化的表格,如下所示:基于ID在MySQL中创建累积和列,mysql,sql,Mysql,Sql,我有一个简化的表格,如下所示: player round point 1 1 25 2 1 18 3 1 15 1 2 18 2 2 25 3 2 15 我想创建一个基于plrID累积计算pointTot的视图 plrID rndID pnt [pointTot] 1 1 25 25 2 1 18
player round point
1 1 25
2 1 18
3 1 15
1 2 18
2 2 25
3 2 15
我想创建一个基于plrID累积计算pointTot的视图
plrID rndID pnt [pointTot]
1 1 25 25
2 1 18 18
3 1 15 15
1 2 18 43
2 2 25 43
3 2 15 30
在过去的几个小时里,我一直在玩弄不同的方法
我需要一个基于plrID的变量var
这是我所能做到的,但我还没有弄清楚如何创建一个
@psum[@plrID]
set @psum := 0;
select `plrID`, `rndID`, `pnt`, (@psum := @psum + `pnt`) as `pointTot`
from `table`
order by `plrID`;
您可以通过以下方式执行此操作:
select `plrID`, `rndID`, `pnt`,
(@psum := if(@p = plrId, @psum + pnt,
if(@p := plrId, pnt, pnt)
)
) as pointTot
from `table` cross join
(select @psum := 0, @p := -1) param
order by `plrID`, rndID;
不能将其添加为视图,因为视图中不允许使用变量。您可以使用以下版本:
select `plrID`, `rndID`, `pnt`,
(select sum(t2.pnt)
from `table` t2
where t2.plrId = t.plrId and t2.rndId <= t.rndId
) as pointTot
from `table` t ;
您可以使用下面的查询来完成此操作
select t.plrID,t.rndID,t.pnt,sum(t1.pnt)
from table t
join table t1
on t.plrID = t1.plrID
and t1.rndID<=t.rndID
group by plrID,rndID
戈登:太棒了!还有一个问题,我不能将其作为视图添加到我的代码中。我必须从一个存储的过程中执行这个吗?以Gordon的解决方案为基础,使用变量求和取决于每个玩家一次处理一个。要使用此方法恢复原始顺序,您可以将其打包为一个子查询,这与我大约2小时前得到的结果相差不远。非常感谢:DNice solution@Andrews。您需要添加一个GROUPBY子句:这只给了我一行,其中某个元素的总和比所有元素的总和都要大。