Zum Inhalt springen

GROUP BY-Klausel

Die GROUP BY-Klausel legt fest, welche Gruppierungsspalten für Aggregationen in der SELECT-Klausel verwendet werden. Wenn eine GROUP BY-Klausel angegeben ist, ist die Abfrage immer eine Aggregatabfrage, auch wenn in der SELECT-Klausel keine Aggregationen stehen.

Wenn eine GROUP BY-Klausel angegeben ist, werden alle Tupel mit übereinstimmenden Daten in den Gruppierungsspalten (d. h. alle Tupel derselben Gruppe) zusammengefasst. Die Werte der Gruppierungsspalten selbst bleiben unverändert, alle anderen Spalten können mit einer Aggregatfunktion kombiniert werden (etwa count, sum, avg usw.).

GROUP BY ALL

Mit GROUP BY ALL gruppieren Sie nach allen Spalten in der SELECT-Anweisung, die nicht in Aggregatfunktionen stehen. Das vereinfacht die Syntax, weil die Spaltenliste nur an einer Stelle gepflegt werden muss, und verhindert Fehler, indem die Granularität von SELECT und GROUP BY gleich bleibt (z. B. verhindert es Duplikate). Siehe die Beispiele unten und weitere Beispiele im Blogbeitrag „Friendlier SQL with DuckDB“.

Mehrere Dimensionen

Normalerweise gruppiert die GROUP BY-Klausel entlang einer einzigen Dimension. Mit den Klauseln GROUPING SETS, CUBE oder ROLLUP können Sie entlang mehrerer Dimensionen gruppieren. Weitere Informationen finden Sie auf der Seite GROUPING SETS.

Beispiele

Zählt die Einträge in der Tabelle addresses, die zu jeder unterschiedlichen Stadt gehören:

SELECT city, count(*)
FROM addresses
GROUP BY city;

Berechnet das durchschnittliche Einkommen pro Stadt und street_name:

SELECT city, street_name, avg(income)
FROM addresses
GROUP BY city, street_name;

Beispiele zu GROUP BY ALL

Gruppiert nach city und street_name, um Duplikate zu entfernen:

SELECT city, street_name
FROM addresses
GROUP BY ALL;

Berechnet das durchschnittliche Einkommen pro Stadt und street_name. Da income in einer Aggregatfunktion steht, wird es nicht in das GROUP BY aufgenommen:

SELECT city, street_name, avg(income)
FROM addresses
GROUP BY ALL;
-- GROUP BY city, street_name:

Syntax