MySQL: Abfrage mit MAX() gibt die restlichen Spalten falsch aus

Gray

Erfahrenes Mitglied
Hi,

Ich habe ein Problem mit einer MAX()-Abfrage

Die Tabelle sieht so aus:
Code:
ID |Gruppe|Wert
1  |A     |8
2  |A     |5
3  |A     |10
4  |B     |1
5  |B     |7

Die Abfrage lautet nun so:
SQL:
SELECT
    ID,
    MAX(Wert)
FROM
    Tabelle
GROUP BY
    Gruppe

Erwartet habe ich das:
Code:
ID |Wert
3  |10
5  |7


Als Ergebnis erhalte ich nun allerdings das:
Code:
ID |Wert
1  |10
4  |7


Die ID passt also gar nicht mehr mit dem ermittelten MAX()-Wert zusammen. Die stammen aus unterschiedlichen Zeilen.

Warum und wie kann ich das vermeiden?

THX
 
Was soll mit der ID gemacht werden? MySQL ist leider inkonsequent und macht einfach was. Eigentlich müsste da ein Fehler kommen.
Entweder musst du auf die ID eine Aggregationsfunktion (SUM, MAX, MIN etc) anwenden oder die ID in die Gruppierung nehmen.
MySQL hat jetzt einfach den ersten Wert der Gruppierung genommen. Also für A die 1 und für B die 4.

Was du willst ist sowas: http://wiki.yaslaw.info/doku.php/sql/tutorials/selectrecordwithmaxdatepergroup
SQL:
select
    min(t2.id) as if,
    t2.gruppe,
    t2.wert
from
    tabelle t2,
    (
        select t1.gruppe, max(t1.wert) as max_wert
        from tabelle t1
        group by t1.gruppe
    ) u1
where
    t2.gruppe = u1.gruppe
    and t2.wert = u1.max_wert
group by
    t2.gruppe,
    t2.wert
Die letzte Gruppierung mit dem min() ist nur dazu da, falls es mehrere gleich hohe Werte in einer Gruppe gibt, dass er dann nur den Ersten anzeigt.
 
Moin Gray,
auch wenn Yaslaw das bestimmt ganz lieb gemeint hat mit der zusätzlichen Gruppierung, um nur eine der IDs anzuzeigen, die den Max-Wert je Gruppe haben - in der Regel wirst du alle IDs mit Max-Werten haben wollen.

Egal ob es nun die Verkäufer mit dem höchsten Umsatz in den Filialen A und B sind oder die Arbeitnehmer mit den meisten unentschuldigten Fehltagen.

Folgendes Szenario:

Filiale A ID=1 Albert 10
Filiale A ID=2 Berta 10
Filiale B ID=9 Chris 2
Filiale B ID=7 Dumbo 1


Stell dir vor, die Verkäufer Albert und Berta in Filiale A haben je 10 Gartenzwerge verkauft; in Filiale B war Chris die Top-Verkäuferin mit 2 Gartenzwergen.

Nachdem du mit dem Ergebnis der obigen Abfrage zum Cheffe gelaufen bist, würden Albert und Chris bei der nächsten Weihnachtsfeier lobend erwähnt werden und die Berta, die du überhaupt nicht auf dem Schirm bzw. im Resultset hattest, die wird nie mit dir ausgehen.

Grüße
Biber
 
Ach Biber. Warum musst du immer die Fragestellung analysieren und nicht nur das Problem. Damit stellst du mich in den Schatten :)
 

Neue Beiträge

Zurück