SQL Unterschied zwischen Group by und Distinct?

3 Antworten

Viele Anwender nehmen GroupBy um ein duplikatfreies Ergebnis von Datensätzen zu erhalten. Gerade z. B. In Access wird gerne schonmal einfach der Button im Abfrageentwurf angeklickt, womit die Funktionen eingeschaltet sind und somit erstmal unter jedem Feld "gruppieren" steht. Beim Ausführen werden dann alle Datensätze selektiert (vorbehaltlich der festgelegten Kriterien) und anschließend wird geschaut, welche gleichen Datensätze zu jeweils einem Datensatz fuer die aktuelle Ansicht gruppiert/zusammengefasst werden koennen. Bei Distinct wird von vorneherein abgefragt "gib mir duplikatfrei die Datensätze mit folgenden Feldern zurück" und Nicht "gib mir alle Datensätze mit folgenden Feldern zurück. Und wenn die Daten da sind, schaue, welche gleichen Datensätze zu jeweils einem Datensatz zusammengefasst werden können".

Man sieht das auch sehr schoen, wenn mann sich das SQL zu der jeweiligen Abfrage ansieht. Vg, armin

Woher ich das weiß:Berufserfahrung

GROUP BY ändert die Form der Ausgabe - die Einträge werden nach einem bestimmten Kriterium sortiert und sichtbar gemacht, wo ein Wert dieses Kriteriums aufhört und ein anderer beginnt.

DISTINCT (alias UNIQUE) überspringt alle Datensätze, bei denen die genannten Felder in dieser Form schon einmal aufgetreten sind.

Völlig verschiedene Dinge, die nichts miteinander zu tun haben. (Sie können natürlich auch gleichzeitig verwendet werden.)

Probier es am besten mal aus.

Woher ich das weiß:Berufserfahrung

iQa1x  26.07.2019, 08:32

Ergänzung: z.B. Wenn du eine Liste mit Messwerten hast (Datum, ort, wert), kann mit "select ort,count(*), avg(wert), min(wert), max(wert) ... group by ort" , wieviele Werte jeweils in einem Ort sind und der Durchschnitt, Minimum, Maximum der Werte pro Ort. Das würde genauso gut auch nach Datum, year(Datum) (pro Jahr), year(datum) und month(datum) (pro Monat und Jahr) etc. funktionieren.

Der Trick dabei ist, nicht alle Spalten ins select aufzunehmen, sondern für bestimmte Kriterien die anderen Spalten mit Aggregatfunktionen zusammenzufassen.

Distinct bezieht dich auf die Werte einer Spalte, Group by ist eine Aggregationsfunktion, ähnlich dem Pivot in Excel.