Rangfolge: count(*) + 1 (mit group)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Rangfolge: count(*) + 1 (mit group)

    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.

  • #2
    Leider noch keine Antwort...
    Wär nett, wenn jemand helfen könnte.
    Kann auch gerne weitere Infos geben.
    ...."Rangfolge bei Gruppierung".... dazu muss doch jemand was wissen!?

    Kommentar


    • #3
      Gib doch mal einen vernünftigen Dump, mit dem gewünschten Ergebnis, damit man auch mal ausprobieren kann.

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Ich hoffe mit Dump meinst du die Datenansicht der Tabelle... oder was anderes?

        Die erste Tabelle möchte ich nach Stext gruppieren . Dann SToreA summieren und den Rang des gruppierten Wertes SToreA anzeigen (mit count(*)+1).
        Dass Ergebnis soll dann so aussehen wie in der zweiten 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

        So sollte dann das Ergebnis aussehen:

        Stext | SToreAtot | rank
        VFB 6 1
        SVA 6 1
        SVW 6 1
        FSV 4 4
        FCB 3 5
        S04 3 5
        FCK 1 7

        --> VFB,SVA,SVW teilen sich den ersten Platz. FSV ist auf dem vierten Platz (da Platz eins drei mal vergeben ist). FCB und S04 auf dem 5ten und FCK auf dem 7ten platz.

        Teilweise klappen meine Queries ja, Aber eben nur teilweise wie oben beschrieben...

        Kommentar


        • #5
          Nein, ich meine damit eine .sql-Datei.

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar

          Lädt...
          X