GROUP BY-Klausel - Amazon Redshift

Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting.

GROUP BY-Klausel

Die GROUP BY-Klausel identifiziert die Gruppierungsspalten für die Abfrage. Sie wird verwendet, um die Zeilen in einer Tabelle zu gruppieren, die in allen aufgelisteten Spalten dieselben Werte haben. Die Reihenfolge, in der die Spalten aufgeführt werden, spielt keine Rolle. Das Ergebnis besteht darin, jeden Satz von Zeilen mit gemeinsamen Werten zu einer einzelnen Gruppenzeile zusammenzufassen, die alle Zeilen in der Gruppe darstellt. Mit GROUP BY können Sie Redundanzen in der Ausgabe beseitigen und Aggregate berechnen, die für die Gruppen gelten. Gruppierungsspalten müssen deklariert werden, wenn die Abfrage aggregierte Werte mit Standardfunktionen wie SUM, AVG und COUNT berechnet. Weitere Informationen finden Sie unter Aggregationsfunktionen.

Syntax

[ GROUP BY expression [, ...] | ALL | aggregation_extension ]

wobei aggregation_extension eins der folgenden Elemente ist:

GROUPING SETS ( () | aggregation_extension [, ...] ) | ROLLUP ( expr [, ...] ) | CUBE ( expr [, ...] )

Parameter

expression

Der Liste der Spalten oder Ausdrücke muss der Liste der nicht aggregierten Ausdrücke in der Auswahlliste der Abfrage entsprechen. Betrachten Sie beispielsweise die folgende einfache Abfrage.

select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by listid, eventid order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)

In dieser Abfrage besteht die Auswahlliste aus zwei aggregierten Ausdrücken. Der erste verwendet die SUM-Funktion und der zweite verwendet die COUNT-Funktion. Die übrigen beiden Spalten, LISTID und EVENTID, müssen als Gruppierungsspalten deklariert werden.

Ausdrücke in der -Klausel können ebenfalls die Auswahlliste durch Verwendung von Ordinalzahlen referenzieren. Das vorherige Beispiel könnte beispielsweise wie folgt abgekürzt werden.

select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by 1,2 order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
ALL

ALL gibt an, dass nach allen in der SELECT-Liste angegebenen Spalten gruppiert werden soll, mit Ausnahme der aggregierten Spalten. Sehen Sie sich beispielsweise die folgende Abfrage an, die nach col1 und col2 gruppiert, ohne sie in der Klausel GROUP BY einzeln angeben zu müssen. Die Spalte col3 ist das Argument der Funktion SUM und daher nicht gruppiert.

SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL

Wenn Sie für eine Spalte in der SELECT-Liste EXCLUDE angeben, gruppiert die Klausel GROUP BY ALL die Ergebnisse nicht anhand dieser spezifischen Spalte.

SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
aggregation_extension

Sie können die Aggregationserweiterungen GROUPING SETS, ROLLUP und CUBE verwenden, um die Arbeit mehrerer GROUP BY-Operationen in einer einzigen Anweisung auszuführen. Weitere Informationen zu Aggregationserweiterungen und verwandten Funktionen finden Sie unter Aggregationserweiterungen.

Beispiele

In den folgenden Beispielen wird die Tabelle SALES verwendet, die folgende Spalten enthält: salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission und saletime. Weitere Informationen zur Tabelle SALES finden Sie unter Beispieldatenbank.

Die folgende Beispielabfrage gruppiert nach salesid und listid, ohne sie in der Klausel GROUP BY einzeln angeben zu müssen. Die Spalte qtysold ist das Argument der Funktion SUM und daher nicht gruppiert.

SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL; salesid | listid | sum --------+---------+------ 33095 | 36572 | 2 88268 | 100813 | 4 110917 | 127048 | 1 ...

Die folgende Beispielabfrage schließt mehrere Spalten in der SELECT-Liste aus. Daher gruppiert GROUP BY ALL nur die Gruppen salesid und listid.

SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime FROM sales GROUP BY ALL; salesid | listid --------+--------- 33095 | 36572 88268 | 100813 110917 | 127048 ...