Gruppiert Spalten, Aliasnamen und Funktionen als Teil der SELECT-Anweisung.
GROUP BY | group-by-term, ... | simple-group-by-term, ... WITH ROLLUP | simple-group-by-term, ... WITH CUBE | GROUPING SETS ( group-by-term, ... )
group-by-term : simple-group-by-term | ( simple-group-by-term, ... ) | ROLLUP ( simple-group-by-term, ... ) | CUBE ( simple-group-by-term, ... )
simple-group-by-term : expression | ( expression ) | ( )
GROUPING SETS-Klausel Mit der GROUPING SETS-Klausel können Sie Aggregatvorgänge für mehrere Gruppierungen von einer einzigen Abfragenspezifikation aus durchführen. Jede Menge, die in einer GROUPING SET-Klausel angegeben ist, entspricht einer GROUP BY-Klausel.
Die folgenden beiden Abfragen sind beispielsweise gleichwertig:
SELECT a, b, SUM( c ) FROM t GROUP BY GROUPING SETS ( ( a, b ), ( a ), ( b ), ( ) ); |
SELECT a, b, SUM( c ) FROM t GROUP BY a, b UNION ALL SELECT a, NULL, SUM( c ) FROM t GROUP BY a UNION ALL SELECT NULL, b, SUM( c ) FROM t GROUP BY b UNION ALL SELECT NULL, NULL, SUM( c ) FROM t; |
Ein GROUPING-Ausdruck kann in der Ergebnismenge als NULL dargestellt werden, abhängig von der Gruppierung, zu der die Zeile gehört. Das kann zu Unklarheiten darüber führen, ob NULL das Ergebnis einer anderen Gruppierung ist, oder ob NULL das Ergebnis eines tatsächlichen NULL-Werts in den zugrunde liegenden Daten ist. Um zwischen NULL in den Eingabedaten und NULL-Werten zu unterscheiden, die durch den GROUPING-Operator eingefügt wurden, benutzen Sie die GROUPING-Funktion.
Durch die Angabe eines leeren Klammersatzes ( ) in der GROUPING SETS-Klausel wird eine einzelne Zeile zurückgegeben, die das Gesamtaggregat enthält.
ROLLUP-Klausel Die ROLLUP-Klausel ähnelt der GROUPING SETS-Klausel insofern, als dass sie verwendet werden kann, um mehrere Gruppierungsangaben innerhalb einer einzigen Abfragenspezifikation anzugeben. Eine ROLLUP-Klausel mit n simple-group-by-term generiert n+1 Gruppierungskombinationen, die formuliert werden, indem mit den leeren Klammern begonnen wird und dann group-by-term aufeinanderfolgend von links nach rechts angehängt wird.
Die folgenden Anweisungen sind beispielsweise gleichwertig:
SELECT a, b, SUM( c ) FROM t GROUP BY ROLLUP ( a, b ); |
SELECT a, b, SUM( c ) FROM t GROUP BY GROUPING SETS ( ( a, b ), a, ( ) ); |
Sie können eine ROLLUP-Klausel innerhalb einer GROUPING SETS-Klausel verwenden.
CUBE-Klausel Die CUBE-Klausel ähnelt den ROLLUP- und GROUPING SETS-Klauseln insofern, als dass sie verwendet werden kann, um mehrere Gruppierungsangaben innerhalb einer einzigen Abfragenspezifikation anzugeben. Die CUBE-Klausel wird verwendet, um alle möglichen Kombinationen darzustellen, die aus den in der CUBE-Klausel enthaltenen Ausdrücken gemacht werden können.
Die folgenden Anweisungen sind beispielsweise gleichwertig:
SELECT a, b, SUM( c ) FROM t GROUP BY CUBE ( a, b, c ); |
SELECT a, b, SUM( c ) FROM t GROUP BY GROUPING SETS ( ( a, b, c ), ( a, b ), ( a, c ), ( b, c ), a, b, c, () ); |
Sie können eine CUBE-Klausel innerhalb einer GROUPING SETS-Klausel verwenden.
WITH ROLLUP-Klausel Dies ist eine alternative Syntax zur ROLLUP-Klausel und wird für Kompatibilität mit Transact-SQL verfügbar gemacht.
WITH CUBE-Klausel Dies ist eine alternative Syntax zur CUBE-Klausel und wird für Kompatibilität mit Transact-SQL verfügbar gemacht.
Wenn Sie die GROUP BY-Klausel verwenden, können Sie nach Ausdrücken (mit ein paar Einschränkungen), Spalten, Aliasnamen oder Funktionen gruppieren. Das Ergebnis der Abfrage enthält eine Zeile für alle eindeutigen Werte (oder Wertmengen) der einzelnen Gruppierungskombinationen.
Die leere GROUP BY-Liste, (), bedeutet, dass die gesamte Eingabe als eine einzige Gruppe behandelt wird. Die folgenden Anweisungen sind beispielsweise gleichwertig:
SELECT COUNT(), SUM(Salary) FROM GROUPO.Employees; |
SELECT COUNT(), SUM(Salary) FROM GROUPO.Employees GROUP BY (); |
Keine.
SQL/2008 GROUP BY ist eine Kernfunktion des SQL/2008-Standards. GROUPING SETS, GROUP BY (), ROLLUP und CUBE sind Teile der optionalen SQL/2008-Sprachenfunktion T431. SQL Anywhere bietet keine Unterstützung für die optionale SQL/2008-Sprachenfunktion T432, "Nested and concatenated GROUPING SETS".
Zu den Erweiterungen des Herstellers für GROUP BY-Klausel gehören folgende:
WITH ROLLUP
WITH CUBE
die Möglichkeit zum Angeben beliebiger Ausdrücke, z.B. von GROUP BY-Begriffen. Im SQL/2008-Standard muss jeder GROUP BY-Begriff eine Spaltenreferenz aus einer Basistabelle in der FROM-Klausel der Abfrage sein.
Das nachfolgende Beispiel gibt eine Ergebnismenge zurück, die die Gesamtanzahl der Bestellungen anzeigt und dann Zwischensummen für die Anzahl der Bestellungen der jeweiligen Jahre (2000 und 2001) liefert.
SELECT year ( OrderDate ) Year, Quarter ( OrderDate ) Quarter, count(*) Orders FROM GROUPO.SalesOrders GROUP BY ROLLUP ( Year, Quarter ) ORDER BY Year, Quarter; |
Wie im vorhergehenden Beispiel für einen ROLLUP-Vorgang gibt das folgende Beispiel einer CUBE-Abfrage eine Ergebnismenge zurück, die die Gesamtanzahl der Bestellungen anzeigt und Zwischensummen für die Anzahl der Bestellungen der jeweiligen Jahre (2000 und 2001) liefert. Anders als bei ROLLUP zeigt diese Abfrage auch Zwischensummen für die Anzahl der Bestellungen in jedem Quartal an (1, 2, 3 und 4).
SELECT year (OrderDate) Year, Quarter ( OrderDate ) Quarter, count(*) Orders FROM GROUPO.SalesOrders GROUP BY CUBE ( Year, Quarter ) ORDER BY Year, Quarter; |
Das nachfolgende Beispiel gibt eine Ergebnismenge zurück, die Zwischensummen für die Anzahl der Bestellungen in den Jahren 2000 und 2001 liefert. Der GROUPING SETS-Vorgang ermöglicht Ihnen die Auswahl der Spalten, aus denen die Zwischensummen ermittelt werden sollen, und nicht die Wiedergabe aller Kombinationen von Zwischensummen wie im CUBE-Vorgang.
SELECT year (OrderDate) Year, Quarter ( OrderDate ) Quarter, count(*) Orders FROM GROUPO.SalesOrders GROUP BY GROUPING SETS ( ( Year, Quarter ), ( Year ) ) ORDER BY Year, Quarter; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |