zweithöchster Wert einer Spalte

alexfrenzel92

SQL-Guru
Beiträge
122
Mit SELECT MAX(column) FROM (table) ist der höchste Wert eines Spalte ermittelbar.

Wie bekomme ich den zweithöchsten Wert?

Danke im Vorraus
 
Werbung:
Was ist, wenn es Werte mehrfach gibt?

Code:
test=*# select * from foo order by s desc;
 s
----
 10
 10
  9
  8
  7
  6
  5
  4
  3
  2
  1
(11 rows)

Soll dann 10 oder 9 kommen?

Falls Du hier 9 erwartest dann ist das ein Fall für dense_rank():

Code:
test=*# select * from foo order by s desc;
 s
----
 10
 10
  9
  8
  7
  6
  5
  4
  3
  2
  1
(11 rows)

Time: 0,191 ms
test=*# select * from (select *, dense_rank() over (order by s desc) from foo order by s desc) x where dense_rank = 2;
 s | dense_rank
---+------------
 9 |  2
(1 row)

Kann MySQL nicht, Du müßtest vorher ein Unique machen. Das nur als Hinweis.
 
Ich drücke Dir einen bunten Mix von ORDER BY, DESC, LIMIT und OFFSET in die Hand.

Passt!
SELECT * FROM `table` ORDER BY `column` DESC LIMIT 1 OFFSET 1

Vielen Dank :)

EDIT: Für den Fall, dass der höchste Wert zwei mal vorkommt, geb ich mich mit dem höchsten auch zufrieden, das wäre in Ordnung für mein Belangen.
Ansonsten lässt sich bestimmt eine oder mehrere If-Klausel(n) einbauen. z.B. (Wenn höchster Wert=zweithöchster Wert) DANN dritthöchster Wert.
 
Zuletzt bearbeitet:
streich in #3 das unique und ersetze es mit distinct:

Code:
test=*# select * from foo order by s desc;
 s
----
 10
 10
  9
  8
  7
  6
  5
  4
  3
  2
  1
(11 rows)

Time: 0,195 ms
test=*# select distinct s from foo order by s desc limit 1 offset 1;
 s
---
 9
(1 row)
[code]
 
so kannst du immer den 2 Wert bekommen.

Code:
SELECT *
  FROM foo
  WHERE
    id < (
      SELECT max(id) FROM foo
    )
  ORDER BY id DESC
  LIMIT 1

Gruss

Bernd
 
Werbung:
Zurück
Oben