Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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.
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.
"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."
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?
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.
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.