MySQL GROUP BY Gotcha

Ich will hier kurz ein Gotcha vorstellen, das bei der Verwendung von Group By unter MySQL auftreten kann und dann ein Gegenbeispiel in PostgreSQL bringen.

Nehmen wir folgende Tabelle an:


O_Id OrderDate OrderPrice Customer
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen

Dann wäre das folgende Query gültig und hilfreich um die Summe für einen Kunden zu bestimmen:


$ SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
Customer SUM(OrderPrice)
Hansen 2000
Nilsen 1700
Jensen 2000

Hierbei befinden sich alle angezeigten Felder in dem GROUP BY Ausdruck oder in einer Aggregatfunktion.

Unter MySQL ist jedoch auch folgendes möglich:


SELECT * FROM Orders GROUP BY Customer

Hierbei würde nach Kunde Gruppiert, sowie alle anderen Felder angezeigt werden. Allerdings ist hierbei *nicht definiert welche Werte die nicht gruppierten Felder haben!* Siehe dazu auch MYSQL: GROUP BY mit versteckten Feldern. Hier wird dies „Feature“ genannt und muss explizit deaktiviert werden …

Unter PostgreSQL bekommt man jedoch standardmäßig folgende Fehlermeldung die einem vor so manchem Fehler bewahren kann:


$ SELECT * FROM Orders GROUP BY Customer;
ERROR: column "Orders.O_Id" must appear in the GROUP BY clause or be used in an aggregate function

Quellen:

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: