Wie bekomme ich bei einer SQL Abfrage den zweithöchsten Wert ausgegeben?

...komplette Frage anzeigen

5 Antworten

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

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

0

klappt also. in postgres ging es auch ohne knurren

0

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

0

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

0

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.

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

0
@ichhabimmerGF

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

1
@SupendedCathal

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

Vielen Vielen Vielen herzlichen Dank!

0

mit

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

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

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

sonst gibts ja einige die kleiner sind


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

0
@SupendedCathal

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

0

correktur

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

0

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

0

ja so siehst du auch aus

0

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

ganz ohne subselect .

Was möchtest Du wissen?