根据ID

时间:2016-07-01 02:26:55

标签: 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     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`;

2 个答案:

答案 0 :(得分:2)

您可以使用以下查询

执行此操作
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

答案 1 :(得分:0)

您可以这样做:

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 ;
相关问题