Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于ID在MySQL中创建累积和列_Mysql_Sql - Fatal编程技术网

基于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子句:这只给了我一行,其中某个元素的总和比所有元素的总和都要大。