Zeilen gruppieren 

Die GROUP BY-Klausel faßt mehrere Zeilen der Datenbanktabelle zu einer Zeile der Selektion zusammen.

Mit der GROUP BY-Klausel können solche Zeilen, die in bestimmten Spalten den gleichen Inhalt haben gruppiert werden, wobei über die Zeilen aller übrigen Spalten Aggregatfunktionen berechnet werden. Die Spalten der GROUP-BY-Klausel können statisch und dynamisch angegeben werden.

Statische Spaltenangabe

Um die Spalten der GROUP BY-Klausel statisch anzugeben, schreibt man:

SELECT <lines> <s1> [AS <a 1>] <s 2> [AS <a 2>]...
               <agg> <sm> [AS <a m>] <agg> <s n> [AS <a n>]...
...
  GROUP BY <s1> <s 2>....

Um die GROUP BY-Klausel zu verwenden, müssen in der SELECT-Klausel alle zu lesenden Spalten einzeln angegeben werden. In der GROUP BY-Klausel werden die Feldbezeichner der Spalten aufgeführt, deren Inhalte verglichen werden soll. Die Spalten können nur mit ihrem Namen aus der Datenbanktabelle benannt werden. Die alternativen Spaltennamen <ai> der SELECT-Klausel können nicht verwendet werden.

Alle Spalten der SELECT-Klausel, die bei Verwendung der GROUP BY-Klausel nicht in dieser aufgeführt sind, müssen in Aggregatausdrücken angegeben werden. Dadurch wird die Vorschrift definiert, wie der Inhalt dieser Spalten in der zusammengefaßten Zeile aus den Inhalten aller Zeilen einer Gruppe berechnet wird.

Dynamische Spaltenangabe

Um die Spalten der GROUP BY-Klausel dynamisch anzugeben, schreibt man:

... GROUP BY (<itab>)...

Dabei ist <itab> eine interne Tabelle mit dem Zeilentyp C und einer der maximalen Länge von 72 Zeichen, welche die Spaltennamen <s 1 > <s 2 >.... enthält.

REPORT demo_select_group_by.

DATA: carrid TYPE sflight-carrid,
      minimum TYPE p DECIMALS 2,
      maximum TYPE p DECIMALS 2.

SELECT     carrid MIN( price ) MAX( price )
  INTO     (carrid, minimum, maximum)
  FROM     sflight
  GROUP BY carrid.

  WRITE: / carrid, minimum, maximum.

ENDSELECT.

Die Listenausgabe ist in etwa:

Die Zeilen der Datenbanktabelle SFLIGHT, die in der Spalte CARRID den gleichen Inhalt haben, werden zusammengefaßt. Die kleinsten und größten Werte der Spalte PRICE werden für jede dieser Gruppen bestimmt und in die zusammengefaßte Zeile gestellt.