Maximum einer Gruppierung ermitteln

wunderkinnd

Neuer Benutzer
Beiträge
1
Hallo zusammen,

Ich habe eine (vereinfachte) Tabelle mit folgendem Inhalt (reales Beispiel zu komplex, um es darzustellen)

bildID | personID | geburtsjahr | bildgröße
123 | 1 | 1970 | 230
124 | 2 | 1970 | 140
125 | 3 | 1971 | 270
126 | 2 | 1970 | 200
127 | 2 | 1970 | 530
128 | 1 | 1970 | 130

Ich möchte mir nun zu jeder Person aus einem bestimmten Geburtsjahr eine BildID ausgeben lassen, bei der die Bildgröße maximal ist.

Wenn ich
SELECT bildID, personID FROM tabelle WHERE geburtsjahr = 1970 GROUP BY personID
bekomme ich eine zufällige bildID innerhalb der Gruppierung personID
Ich möchte aber das folgende Ergebnis haben:

bildID | personID
123 | 1
127 | 2

Eine ähnliche Frage wurde hier bereits bearbeitet und gelöst, jedoch arbeitet mein Provider mit 5.5.52-MariaDB, so dass ich dir dort beschriebene Lösung nicht verwenden kann.
 
Werbung:
Dein SQL ist syntaktisch / logisch falsch, was MySQL aber nicht erkennt und stattdessen ein zufälliges Resultat liefert. Binäre Müll halt.

Was Du sucht:

Code:
test=*# select * from wunderkind ;
 bild | person | jahr |  g  
------+--------+------+-----
  123 |      1 | 1970 | 230
  124 |      2 | 1970 | 140
  125 |      3 | 1971 | 270
  126 |      2 | 1970 | 200
  127 |      2 | 1970 | 530
  128 |      1 | 1970 | 130
(6 rows)

test=*# select person, max(g) from wunderkind where jahr = 1970 group by person;
 person | max
--------+-----
      1 | 230
      2 | 530
(2 rows)

test=*# select * from wunderkind where (person,g) in (select person, max(g) from wunderkind where jahr = 1970 group by person);
 bild | person | jahr |  g  
------+--------+------+-----
  123 |      1 | 1970 | 230
  127 |      2 | 1970 | 530
(2 rows)

test=*#
 
Zurück
Oben