Show TOC Anfang des Inhaltsbereichs

Zeilen gruppieren  Dokument im Navigationsbaum lokalisieren

Die GROUP-BY-Klausel fasst mehrere Zeilen der Datenbanktabelle zu einer Zeile der Selektion zusammen.

Diese Grafik wird im zugehörigen Text erklärt

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 a1] s2 [AS a2]...
                agg sm [AS am] agg sn [AS an]...
...
  
GROUP BY s1 s2....

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 a1 a2… 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.

Diese Grafik wird im zugehörigen Text erklärt

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 s1 s2 ...  enthält.

Beispiel

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:

Diese Grafik wird im zugehörigen Text erklärt

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

 

 

Ende des Inhaltsbereichs