2016-07-01 11 views
0

Ich habe eine „vereinfachte“ Tabelle, die wie folgt aussieht:Erstellen einer kumulativen Summe Spalte in MySQL basiert auf einer ID

player round point 
1  1  25 
2  1  18 
3  1  15 
1  2  18 
2  2  25 
3  2  15 

möchte ich eine Ansicht erstellen, auf plrID

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 
kumulativ basierend pointTot berechnet

Ich habe die letzten Stunden mit verschiedenen Methoden gespielt.

würde ich eine Variable var auf den plrID basierend brauchen

Diese so weit ist, wie ich ohne die Möglichkeit bekam, herauszufinden, wie ein
@psum [@plrID]

set @psum := 0; 
select `plrID`, `rndID`, `pnt`, (@psum := @psum + `pnt`) as `pointTot` 
from `table` 
order by `plrID`; 

Antwort

2

Sie können diese

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 
+0

Schöne Lösung @Andrews. Sie sollten hinzufügen, in einer 'Group by '-Klausel: http://sqlfiddle.com/#!9/8b10f7/2 – Cam

+0

Dies gibt mir nur eine einzelne ROW mit einer Summe von etwas, exponentiell größer als die Summe von allem zusammen . –

0

erstellen Sie können dies tun, wie:

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; 

Sie können dies als Ansicht nicht hinzufügen, da Variablen in einer Ansicht nicht erlaubt. Sie können diese Version verwenden:

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 ; 
+0

Gordon fantastische unter Abfrage tun! eine andere Frage, ich kann das nicht als eine Ansicht zu meinem Code hinzufügen. Müsste ich das aus einem gespeicherten Proc ausführen? –

+0

Um von Gordons Lösung aufzubauen, hängt die Summierung mit einer Variablen davon ab, dass jeder Spieler einzeln bearbeitet wird. Um die ursprüngliche Reihenfolge mit dieser Methode wiederherzustellen, könnten Sie dies als Unterabfrage einpacken http://sqlfiddle.com/#!9/8b10f7/1 – Cam

+0

Ärgerlich ist dies nicht weit weg, was ich vor etwa 2 Stunden hatte. Vielen Dank: D –

Verwandte Themen