Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

zweithöchster Wert einer Spalte

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von alexfrenzel92, 1 Mai 2015.

  1. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    Mit SELECT MAX(column) FROM (table) ist der höchste Wert eines Spalte ermittelbar.

    Wie bekomme ich den zweithöchsten Wert?

    Danke im Vorraus
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich drücke Dir einen bunten Mix von ORDER BY, DESC, LIMIT und OFFSET in die Hand.
     
    alexfrenzel92 gefällt das.
  3. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  4. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    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: 1 Mai 2015
  5. akretschmer

    akretschmer Datenbank-Guru

    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]
     
  6. BerndB

    BerndB Datenbank-Guru

    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
     
    alexfrenzel92 gefällt das.
  7. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    Funktioniert :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden