Wer kann helfen?
Habe einige Schwierigkeiten eine Query zu finden um gruppierte Summen als Ranking zu zeigen.
Die Inhalte der Tabellen hab ich ein wenig vereinfacht. Macht euch daher bitte keine Gedanken über den Sinn der Tabellen und der vergebenen Spaltennamen.
Einige Teile habe ich bereits zum Laufen gebracht die ich unten aufzeige. Zu guter Letzt fehlt mir aber das benötigte Licht.
__________________________________________
Inhalt von Tabelle spieletest ist folgender:
Stext | SToreA
VFB 1
VFB 2
VFB 3
FCB 1
FCB 2
S04 1
S04 2
FCK 1
SVA 6
SVW 1
SVW 2
SVW 3
FSV 4
_______________________________________
Nächster Schritt (funktioniert bereits):
Ich möchte den rang der einzelnen Einträge sehen. Der Eintrag mit dem höchsten Wert soll rang 1 sein. Der nächst kleinere Rang 2.
Gleiche Werte sollen auf dem gleichen rang stehen. Der nächstkleinere soll dann aber abgewertet sein (zb. Vier einträge haben SToreA = 2. Alle stehen damit auf Platz 5. Der nächste Rang ist dann 9.
SELECT *,
(select count((s2.SToreA))+1 from spieletest s2 where s2.SToreA > s.SToreA) as rank
from spieletest s;
ergibt folgende Tabelle:
Stext | SToreA | rank
VFB 1 9
VFB 2 5
VFB 3 3
FCB 1 9
FCB 2 5
S04 1 9
S04 2 5
FCK 1 9
SVA 6 1
SVW 1 9
SVW 2 5
SVW 3 3
FSV 4 2
_______________________________________
Nächster Schritt (funktioniert auch schon):
Ich möchte Stext gruppieren und SToreA summiert in einer Tabelle zeigen:
SELECT s.SpielID,s.Stext,sum(s.SToreA) as SToreAtot, s.SToreA as SToreA,
from spieletest s group by s.Stext order by SToreAtot desc;
Stext | SToreAtot
VFB 6
SVA 6
SVW 6
FSV 4
FCB 3
S04 3
FCK 1
_______________
Jetzt kommt mein Problem:
Wie kann ich die Rangfolge der gruppierungen zeigen???
Einen Ansazt hab ich bereits. Der bringt mir aber Ergebnisse die nicht so ganz richtig sind.
SELECT s.SpielID,s.Stext,sum(s.SToreA) as SToreAtot, s.SToreA as SToreA,
(select count((s2.Stext))+1 from spieletest s2 where
(select sum(s2.SToreA) from spieletest s4 where s4.Stext = s.Stext)
>
(select distinct(sum(s.SToreA)) from spieletest s3 where s3.Stext = s.Stext))as zahl
from spieletest s group by s.Stext order by SToreAtot desc;
ergibt:
Stext | SToreAtot | rank
VFB 6 9
SVA 6 1
SVW 6 9
FSV 4 2
FCB 3 9
S04 3 9
FCK 1 9
Rang 1 ist richtig. VFB und SVW sollten allerdings auch auf 1 stehen.
Die Query ist nicht so ganz richtig. Aber die Lösungssuche hat mich bereits mehrere Tage und viele Nerven gekostet. Ich hoffe mir kann jemand helfen.
Gerne auch mit einer anderem Ansatz für die Query.
Habe einige Schwierigkeiten eine Query zu finden um gruppierte Summen als Ranking zu zeigen.
Die Inhalte der Tabellen hab ich ein wenig vereinfacht. Macht euch daher bitte keine Gedanken über den Sinn der Tabellen und der vergebenen Spaltennamen.
Einige Teile habe ich bereits zum Laufen gebracht die ich unten aufzeige. Zu guter Letzt fehlt mir aber das benötigte Licht.
__________________________________________
Inhalt von Tabelle spieletest ist folgender:
Stext | SToreA
VFB 1
VFB 2
VFB 3
FCB 1
FCB 2
S04 1
S04 2
FCK 1
SVA 6
SVW 1
SVW 2
SVW 3
FSV 4
_______________________________________
Nächster Schritt (funktioniert bereits):
Ich möchte den rang der einzelnen Einträge sehen. Der Eintrag mit dem höchsten Wert soll rang 1 sein. Der nächst kleinere Rang 2.
Gleiche Werte sollen auf dem gleichen rang stehen. Der nächstkleinere soll dann aber abgewertet sein (zb. Vier einträge haben SToreA = 2. Alle stehen damit auf Platz 5. Der nächste Rang ist dann 9.
SELECT *,
(select count((s2.SToreA))+1 from spieletest s2 where s2.SToreA > s.SToreA) as rank
from spieletest s;
ergibt folgende Tabelle:
Stext | SToreA | rank
VFB 1 9
VFB 2 5
VFB 3 3
FCB 1 9
FCB 2 5
S04 1 9
S04 2 5
FCK 1 9
SVA 6 1
SVW 1 9
SVW 2 5
SVW 3 3
FSV 4 2
_______________________________________
Nächster Schritt (funktioniert auch schon):
Ich möchte Stext gruppieren und SToreA summiert in einer Tabelle zeigen:
SELECT s.SpielID,s.Stext,sum(s.SToreA) as SToreAtot, s.SToreA as SToreA,
from spieletest s group by s.Stext order by SToreAtot desc;
Stext | SToreAtot
VFB 6
SVA 6
SVW 6
FSV 4
FCB 3
S04 3
FCK 1
_______________
Jetzt kommt mein Problem:
Wie kann ich die Rangfolge der gruppierungen zeigen???
Einen Ansazt hab ich bereits. Der bringt mir aber Ergebnisse die nicht so ganz richtig sind.
SELECT s.SpielID,s.Stext,sum(s.SToreA) as SToreAtot, s.SToreA as SToreA,
(select count((s2.Stext))+1 from spieletest s2 where
(select sum(s2.SToreA) from spieletest s4 where s4.Stext = s.Stext)
>
(select distinct(sum(s.SToreA)) from spieletest s3 where s3.Stext = s.Stext))as zahl
from spieletest s group by s.Stext order by SToreAtot desc;
ergibt:
Stext | SToreAtot | rank
VFB 6 9
SVA 6 1
SVW 6 9
FSV 4 2
FCB 3 9
S04 3 9
FCK 1 9
Rang 1 ist richtig. VFB und SVW sollten allerdings auch auf 1 stehen.
Die Query ist nicht so ganz richtig. Aber die Lösungssuche hat mich bereits mehrere Tage und viele Nerven gekostet. Ich hoffe mir kann jemand helfen.
Gerne auch mit einer anderem Ansatz für die Query.
Kommentar