WHERE Spalte = höchster Wert

alexfrenzel92

SQL-Guru
Beiträge
122
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.
 
Werbung:
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)
 
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.
 
Werbung:
Zurück
Oben