Probleme bei MySQL Abfrage einer Ranking Tabelle

Doofi

Benutzer
Beiträge
9
Hallo, ich sehe den Wald vor lauter Bäumen nicht.
Meine Tabelle beinhaltet mehrere Spalten, darunter eine mit NAME und eine mit WERT.
Ich möchte jetzt, das bei einer Abfrage für jeden NAME die Zeile mit dem höchsten WERT für diesen Namen ausgegeben wird. Aber irgendwie verrutscht bei meinen bisherigen versuchen alles.

SELECT MAX(WERT) AS RANK FROM `challenge` WHERE UEBUNG = 'Double Trouble' GROUP BY NAME ORDER BY RANK DESC;

Das Ergebnis stimmt zwar so für die Spalte WERT, aber möchte ich jetzt z.B. die ID für die Zeile mit dem höchsten Wert des NAME anzeigen lassen, bekomme ich immer einer andere.

Wo kann da der Fehler liegen? Bild

Bin für jede Hilfe dankbar!
Gruss Micha
 
Werbung:
Ich habe eine Lösung gefunden!

WITH RankedData AS (
SELECT ID, NAME, PROZENT, ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY WERT DESC) as rn
FROM challenge
WHERE UEBUNG = 'Double Trouble' )
SELECT *
FROM RankedData
WHERE rn = 1
ORDER BY WERT DESC;";

Jetzt fehlt mir nur noch, wie ich bei gleichem WERT immer nur die Zeile mit dem neuesten Eintrag berücksichtige.
 
Also zu #1
Bei GROUP BY muss jede Spalte im Select entweder auch im GROUP BY stehen oder aggregiert sein - Essentielle Grundregel. Wenn du die ID mit ausgeben willst, muss diese ebenfalls im GROUP BY stehen. Wenn die ID nicht die selbe ist, könntest du sie aggregieren. Das macht aber in dem Fall keinen Sinn, denn dann müssen ID und WERT nicht aus der selben Zeile stammen. Daher ist die Lösung in #2 schon richtig, es gibt aber auch noch andere Wege.

Wenn dein Code aus #1 ohne Fehlermeldung so ausgeführt wurde, dann hast du vermutlich eine veraltete MySQL-Version. Bis vor einigen Jahren hat MySQL sich nicht um den Code gekümmert und dann mehr oder minder zufällige Ergebnisse geliefert. Nach meinem Wissen gibt es in den neuen Versionen eine entsprechende Fehlermeldung- in allen anderen DBMSen gibt es den jedenfalls.

zu #2:
Erweitere dein ORDER BY um eine weitere Spalte:
Code:
ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY WERT DESC, datumzeit DESC)
 
Werbung:
Vielen Dank, das mit dem Datum hab ich umgesetzt. Die Datenbankversion auf unserem Server ist MariaDB Version 10.11, ich bekomme bei dem Code keine Fehlermeldung.
Das mit dem Group By war mir nicht bewusst, werde ich beachten.
Schönen Sonntag noch!
 
Zurück
Oben