Frage von ichhabimmerGF, 159

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

Antwort
von neredboyHD, 135

Falls MySQL mittlerweile subselects kann: select max(x) from y where x < (select max(x) from y)

Kommentar von ichhabimmerGF ,

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

Kommentar von neredboyHD ,

klappt also. in postgres ging es auch ohne knurren

Kommentar von ichhabimmerGF ,

xD ich hab mal wieder nicht nachgedacht xD vielen herzlichen Dank :)

Kommentar von RakonDark ,

warum subselect ? max ist doch der ORDER BY wert DESC .

Kommentar von neredboyHD ,

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

Antwort
von maximilianus7, 83

mit

select distinct x from ... order by x desc limit 2

kannst du mit 2x fetch beide werte (max, 2-höchstes)

Antwort
von RakonDark, 92

select wert from tabelle ORDER BY wert DESC where wert < max(wert)
 limit 1

sonst gibts ja einige die kleiner sind


Kommentar von SupendedCathal ,

ich würde mal sagen, das läuft nicht. Hast du schon ausprobiert.

Kommentar von RakonDark ,

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

Kommentar von RakonDark ,

correktur

select wert from tabelle ORDER BY wert DESC  LIMIT 1,1

Kommentar von neredboyHD ,

und auch das geht wieder nur wenn jeder Wert nur einmal vorkommt

Kommentar von neredboyHD ,

Stichwort: group by

Kommentar von RakonDark ,
select DISTINCT wert from test ORDER BY wert DESC LIMIT 1,1
Kommentar von neredboyHD ,

jawohl mr. allesbesserwissen

Kommentar von RakonDark ,

aha , nur weil ich mehr weiss als du , lol

wissen ist macht .

Kommentar von neredboyHD ,

ja so siehst du auch aus

Antwort
von SupendedCathal, 95

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.

Kommentar von ichhabimmerGF ,

Auch Dir Danke, aber leider gleiches Problem wie oben :/.

Kommentar von SupendedCathal ,

Welches Problem. Du hast doch dann alle Sätze < größtes Ergebnis. Davon dan max() und du hast deinen wert.

Kommentar von ichhabimmerGF ,

Verdammt, der Schritt war eine Ecke zu weit -.- für mein logisches Verständnis an einem Samstag Abend xD.

Vielen Vielen Vielen herzlichen Dank!

Kommentar von RakonDark ,

warum subselect ? max ist doch der ORDER BY wert DESC .

Antwort
von RakonDark, 57

SELECT DISTINCT wert  FROM tabelle ORDER BY wert DESC  LIMIT 1,1

ganz ohne subselect .

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten