MySQL - Probleme mit einer Aufgabe !

James123

Mitglied
Aufgabe : Geben Sie die verschieden Paare von PLZ und Ort der Kundentabelle aus !

Mein Lösungsansatz : SELECT DISTINCT `PLZ`,`Ort` FROM `t_kunden`

bin mir aber nicht sicher ....
 
K

kneitzel

Gast
Sollte dann im GROUP BY nicht PLZ und Ort aufgeführt werden? Ansonsten dürfte die Query nach meinem aktuellen Verständnis auch nicht laufen, denn ohne Aggregate Funktion darf doch kein weiteres Feld aufgeführt werden.

Die Datenbanken sollten erkennen, dass ein Group BY ohne jegliche Aggregate Funktion eben wie ein DISTINCT bearbeitet werden kann so dass die Execution Plans identisch sein dürften. SQL Server und Oracle ist dies wohl der Fall.
 

Meniskusschaden

Top Contributor
Die Varianten von James123 und kneitzel liefern meines Erachtens identische Ergebnisse. Die Variante von Thallius kann abweichende Ergebnisse liefern, falls dieselbe Postleitzahl mit unterschiedlichen Ortsbezeichnungen gespeichert ist. Bei Thallius würde so eine Postleitzahl nur einmal auftauchen, in den beiden anderen Varianten einmal pro Ortsbezeichnung.
 
K

kneitzel

Gast
MySQL erlaubt die Nennung von Feldern, die nicht im Group by aufgeführt sind und keine Aggregate Funktion besitzen?
SQL Server ist da auf jeden Fall sehr genau und meckert da dann:

Column 'Ort' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
 

Meniskusschaden

Top Contributor
Ich finde das Verhalten von MySQL ziemlich inkonsequent und sehe es eigentlich als fehlerhaft an. Habe deshalb noch etwas weiter gesucht und hier http://stackoverflow.com/questions/3168042/can-i-use-non-aggregate-columns-with-group-by folgenden Hinweis gefunden:

"MySQL (and SQLite) decided in their infinite wisdom that they would go against spec, and allow queries to accept GROUP BY clauses missing columns quoted in the SELECT - it effectively makes these queries not portable."
 

Thallius

Top Contributor
Hm, ich dachte es ist kein Problem mehr zu selecten als zu groupen (Wäre ja sonst auch verdammt mühsam). Das sollte doch auch SQL können oder nicht. Was in SQL nicht geht ist das ich nach etwas Groupe das ich nicht selecte. Oder bin ich da jetzt komplett auf dem falschen Dampfer?

Gruß

Claus
 

Meniskusschaden

Top Contributor
Aber wenn man für die nicht gruppierten Spalten keine Aggregationsfunktion angibt, ist ja nicht definiert, wie das Ergebnis aussehen soll. Im Beispiel oben entscheidet dann der SQL-Server, welches die "richtige" Ortsbezeichnung ist. Das darf meines Erachtens nicht sein.
 
K

kneitzel

Gast
Also was man selektiert ist dem GROUP By ja egal. So ein Query wird ja in einzelnen Schritten angearbeitet wenn man so will und was wie selektiert wird kommt relativ spät. Fakt ist, dass er intern erst einmal gruppiert, aber was dann Ausgegeben wird oder nicht ist dem SQL Server ja erst einmal beim abarbeiten egal.
 

Neue Themen


Oben