我有一个“简化”表,如下所示:
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`;
答案 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 ;