DISTINCT vs. GROUP BY?

Hi

Ich bin mir nicht sicher, wo die Unterschiede zwischen SELECT DISTINCT und der GROUP BY Klausel bestehen. Kann man sagen, dass DISTINCT ein Spezialfall eines GROUP BYs ist?
Also z.B. SELECT DISTINCT A,B,C… FROM T
entspricht
SELECT A,B,C… FROM T GROUP BY A,B,C…?

In GROUP BY ist es ja möglich, nicht nach allen Tupeln zu gruppieren und für den Rest Aggregatsfunktionen einzusetzen, das geht mit DISTINCT so nicht, oder?

Danke schonmal!
Jörg

Hallo,

DISTINCT heißt ganz einfach: doppelte eliminieren.
Es wird in einem ganz einfachen SELECT eingesetzt.

GROUP BY brauchst du, wenn du Gruppenfunktionen benutzt, also aggregierte Daten hast und nach bestimmten Gruppen (Attributwerten) zusammenfassen willst.

Die beiden haben nichts miteinander zu tun.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Jörg,
du hast es genau erfasst. In den beschriebenen Fällen sind die Statements austauschbar, was das Ergebnis betrifft, in diesem Sinne ist Distinct ein Spezialfall des Group By.

Quizfrage bleibt
a) ob die Datenbank das gleiche tut?
b) was der Leser des SQL-Statements denkt?

a) muss man im Zweifelsfall ausprobieren. In sämtlichen Fällen, die ich mir bisher angeschaut hab macht zumindesten Oracle das gleiche, und ich wäre ernsthaft verblüfft, wenn es nennenswerte Datenbanken gibt, die das nicht tun.

b) Ich persönlich finde das distinct sprechender als ein Group by mit kompletten Spaltenliste. Gerade wenn die länger ist und eventuell Funktionen enthält kann das ja schon mal unübersichtlich werden, ob im Select und Group by die selben Spalten stehen.

Jens

Ich bin mir nicht sicher, wo die Unterschiede zwischen SELECT
DISTINCT und der GROUP BY Klausel bestehen.

Wie schon gesagt wurde, in der Eliminationsregel.
Zum Aggregieren ist distinct nicht geeignet, da auf einzigartige Spalteneinträge runtergeschnitten wird.

Hier ein schönes Beispiel:

select A, count(\*) from T group by A;

Jetzt probieren das mal mit „select distinct A“…

Gruss,
Mike