Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (E-O)

 

GROUP BY-Klausel

Benutzen Sie diese Klausel, um Spalten, Aliasnamen und Funktionen als Teil der SELECT-Anweisung zusammenzufassen.

Syntax
GROUP BY
| Gruppieren_nach_Begriff, ... ]
| einfaches_Gruppieren_nach_Begriff, ...  WITH ROLLUP
| einfaches_Gruppieren_nach_Begriff, ... WITH CUBE
|GROUPING SETS ( Gruppieren_nach_Begriff, ... )
Gruppieren_nach_Begriff :
einfaches_Gruppieren_nach_Begriff
| ( einfaches_Gruppieren_nach_Begriff, ... )
| ROLLUP ( einfaches_Gruppieren_nach_Begriff, ... )
| CUBE ( einfaches_Gruppieren_nach_Begriff, ... )
einfaches_Gruppieren_nach_Begriff :
Ausdruck
| ( Ausdruck ) 
| ( )
Parameter
  • 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. Weitere Hinweise finden Sie unter GROUPING-Funktion [Aggregat].

    Durch die Angabe eines leeren Klammersatzes ( ) in der GROUPING SETS-Klausel wird eine einzelne Zeile zurückgegeben, die das Gesamtaggregat enthält.

    Weitere Informationen zur Verwendung von leeren Klammern in Gruppierungskombinationen mit einem Beispiel finden Sie unter Leere Gruppierungsspezifikation angeben.

  • 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 einfaches_Gruppieren_nach_Begriff generiert n+1 Gruppierungskombinationen, die formuliert werden, indem mit den leeren Klammern begonnen wird und dann Gruppieren_nach_Begriff 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.

    Weitere Hinweise zu ROLLUP-Vorgängen finden Sie unter ROLLUP 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.

    Weitere Hinweise zu ROLLUP-Vorgängen finden Sie unter CUBE verwenden.

  • WITH ROLLUP-Klausel   Dies ist eine alternative Syntax zur ROLLUP-Klausel und wird für Kompatibilität mit T-SQL verfügbar gemacht.

  • WITH CUBE-Klausel   Dies ist eine alternative Syntax zur CUBE-Klausel und wird für Kompatibilität mit T-SQL verfügbar gemacht.

Bemerkungen

Wenn Sie die GROUP BY-Klausel verwenden, können Sie nach Spalten, Aliasnamen oder Funktionen gruppieren. Das Ergebnis der Abfrage enthält eine Zeile für alle eindeutigen Werte (oder Wertmengen) der einzelnen Gruppierungskombinationen.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Die GROUP BY-Klausel ist eine Kernfunktion, während GROUPING SETS, ROLLUP und CUBE Funktionen außerhalb der Kern-SQL sind. Die ROLLUP-Klausel ist beispielsweise Teil des Merkmals T431. WITH ROLLUP und WITH CUBE sind Erweiterungen des Herstellers.

Beispiele

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 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 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 SalesOrders
GROUP BY GROUPING SETS ( ( Year, Quarter ), ( Year ) )
ORDER BY Year, Quarter;