Select Distinct Name , Strasse, Ort Group By Name Order by Strasse

Thomas_Jung

Erfahrenes Mitglied
Hallo
Ich möchte mit einer Abfrage alle MySQL Felder anzeigen und dann nach jedem Feld sortieren können.
Aber keine doppelten Namen anzeigen lassen.

Wenn ich folgenden Befehl ausführe
Select Distinct Name , Strasse, Ort Group By Name Order by Strasse DESC
Sortiert er mir nicht richtig nach Strasse

An was liegt das.
Gruss Thomas
 
Warum machst du überhaupt einen DISTINCT-Select um im gleichen Query auch GROUP BY zu verwenden? Ist das nicht doppel-gemoppelt?
 
Schon klar, aber SELECT DISTINCT auf eine Spalte macht genau das gleiche wie das GROUP BY einer Spalte. Außerdem kannst du auch bei GROUP BY die Sortier-Reihenfolge angeben. Du könntest also mal folgendes versuchen:

Code:
SELECT  Name , Strasse, Ort Group By Name, Strasse DESC
 
Du solltest bei ienem GROUP BY alle Felder angeben die keine Goup-By-Funktion haben (SUM, MAX, COUNT etc).
MySQL ist so Freundlich (oder eben so ungenau) dass es unvollständige GROUP BY - Statements zulässt. Kein anderes mir bekanntes DBMS ist so liederlich und lässt das zu. Das verleitet zu SQL-Scripten die mehr per Zufall das richtige liefern als dass sich der Programmierer damit beschäftigt hätte.

Die folgenden SQL geben be MySQL alle dasselbe Resultat.
SQL:
-- Mit nur einem Feld im GROUP BY. Führt bei den Meisten DBMS zu einem Fehler
SELECT  Name , Strasse, Ort FROM myTable Group By Name;
-- Vollständiger GROUP BY
SELECT  Name , Strasse, Ort FROM myTable GROUP By Name, Strasse, Ort;
-- Mittels Distinct
SELECT DISTINCT  Name , Strasse, Ort FROM myTable;

Bevor du dich um die Sortierung kümmernst solltest du dich darum bemühen was in deinem GROUP BY mit Strsse und Ort passieren soll.
 
Zuletzt bearbeitet von einem Moderator:
HI

Vielen Dank für die Info.

dev.mysql.com/doc/refman/5.1/de/group-by-modifiers.html

Habe mir das noch mal durchgelesen.

Gruss Thomas
 

Neue Beiträge

Zurück