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

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.

ichhabimmerGF 
Fragesteller
 06.02.2016, 23:41

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

0
SupendedCathal  06.02.2016, 23:44
@ichhabimmerGF

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

1
ichhabimmerGF 
Fragesteller
 06.02.2016, 23:48
@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

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

ichhabimmerGF 
Fragesteller
 06.02.2016, 23:40

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
neredboyHD  06.02.2016, 23:46

klappt also. in postgres ging es auch ohne knurren

0
ichhabimmerGF 
Fragesteller
 06.02.2016, 23:50
@neredboyHD

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

0
RakonDark  06.02.2016, 23:58

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

0
neredboyHD  07.02.2016, 00:01

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

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


SupendedCathal  07.02.2016, 00:01

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

0
RakonDark  07.02.2016, 00:03
@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
RakonDark  07.02.2016, 00:06

correktur

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

0
neredboyHD  07.02.2016, 00:07

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

0
neredboyHD  07.02.2016, 00:09

Stichwort: group by

0
neredboyHD  07.02.2016, 00:11

jawohl mr. allesbesserwissen

0
neredboyHD  07.02.2016, 00:14

ja so siehst du auch aus

0

mit

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

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