Wie bekomme ich bei einer SQL Abfrage den zweithöchsten Wert ausgegeben?
Moin,
Ich habe ein Ranking System erstellt, was mir nun aus der Datenbank die Rankings ausgeben soll.
Der erste Platz wird schon ausgegeben, indem ich einfach mit max() abfrage.
Jetzt wird es wiederum kniffelig. Wie bekomme ich den zweit höchsten Wert?
MfG ichhabimmerGF
5 Antworten
Kommt auf die Datenbank an. Standard SQL:
Den SQL für den höchsten Wert hast Du ja. (nennen wir ihn XX)
Noch mal der gleiche SQL wie XX mit
where feld < max(subselect XX)
Verstanden?
Ist nicht sehr performant. Geht in einigen Db eleganter.
Welches Problem. Du hast doch dann alle Sätze < größtes Ergebnis. Davon dan max() und du hast deinen wert.
Verdammt, der Schritt war eine Ecke zu weit -.- für mein logisches Verständnis an einem Samstag Abend xD.
Vielen Vielen Vielen herzlichen Dank!
Falls MySQL mittlerweile subselects kann: select max(x) from y where x < (select max(x) from y)
er wollte den zweitgrößten Wert... das da geht vielleicht auch: select x from y order by x desc offset 2 limit 1 -- unter der Annahme, dass jeder Wert nur einmal vorkommt, sonst geht's nicht
xD ich hab mal wieder nicht nachgedacht xD vielen herzlichen Dank :)
Hey, Danke schon einmal für die schnelle Antwort.
Ja mit subselects habe ich auch schon bei der ersten Position gearbeitet und ja es funktioniert.
Gehe ich aber nun so vor, wie Du bereits gesagt hast, bekomme ich alle Ergebnisse ausgegeben, welche kleiner sind als das höchste Ergebnis ;).
MfG
ichhabimmerGF
SELECT DISTINCT wert FROM tabelle ORDER BY wert DESC LIMIT 1,1
ganz ohne subselect .
select wert from tabelle ORDER BY wert DESC where wert < max(wert)
limit 1
sonst gibts ja einige die kleiner sind
ne ich wollte das max auch gar nicht in den where packen
eher limit 2 und dann nehm ich den 2 wert .
aber ich überdenke das nochmal eben , sollte aber gehen ohne subselect
mit
select distinct x from ... order by x desc limit 2
kannst du mit 2x fetch beide werte (max, 2-höchstes)
Auch Dir Danke, aber leider gleiches Problem wie oben :/.