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

WHERE Spalte = höchster Wert

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von alexfrenzel92, 12 Juli 2016.

  1. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    Ich habe keine Ahnung, ob es das Thema schon gibt - beim Googeln habe ich es nicht gefunden. Falls es das Thema schon gibt (oder die Antworten einfach zu finden sind, etc), kann es ja gelöscht werden :|

    Gibt es eine Abfragenkonstellation, bei der nur die Zeilen abgefragt werden, in denen der Wert einer Spalte der höchste Wert in dieser Spalte gruppiert nach einer anderen Spalte ist?

    Code:
    A | B | C
    a  |  50  |     asdf
    b |   150 |     sdfas
    b | 120 |    gsdf
     c |   20 |     hgfd
     d |   30 |    twew
    
    
    Also Ergebnis soll nun das übrig bleiben:

    Code:
    A  |  B  |  C
    a  |  50 |   asdf
    b |  150 | sdfas
    c | 20   |  hgfd
    d | 30  | twew
    
    
    Code:
    SELECT * FROM Tabelle GROUP BY 'A' ODER BY 'B'
    gruppiert zuerst und sortiert dann - womit Werte verloren gehen
    Code:
    SELECT * FROM Tabelle ORDER BY 'B' GROUP BY A' ergibt den Fehler
    Code:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY
    Davor irgendein Fehler #1111 aber den bekomme ich jetzt nicht mehr hin.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    sollte sogar mit MySQL gehen:

    Code:
    test=*# select * from alex ;
     a |  b  |  c   
    ---+-----+-------
     a |  50 | asdf
     b | 150 | sdfas
     b | 120 | gsdf
     c |  20 | hgfd
     d |  30 | twew
    (5 Zeilen)
    
    test=*# select a, b, c from alex where (a, b) in (select a, max(b) from alex group by a);
     a |  b  |  c   
    ---+-----+-------
     a |  50 | asdf
     b | 150 | sdfas
     c |  20 | hgfd
     d |  30 | twew
    (4 Zeilen)
    
    
     
    alexfrenzel92 gefällt das.
  3. akretschmer

    akretschmer Datenbank-Guru

    etwas einfacher geht es übrigens in PostgreSQL:

    Code:
    test=*# select distinct on (a) a, b, c from alex order by a, b desc;
     a |  b  |  c   
    ---+-----+-------
     a |  50 | asdf
     b | 150 | sdfas
     c |  20 | hgfd
     d |  30 | twew
    (4 Zeilen)
    
    Aber das DISTINCT ON (...) ist eine PostgreSQL-Erweiterung und nicht portabel.
     
  4. alexfrenzel92

    alexfrenzel92 Datenbank-Guru

    Deswegen liebe ich solche Foren :) Funktioniert mit MySql(i) optimalst - vielen Dank!
     
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