Ansicht
Dokumentation

ABAPGROUPBY_CLAUSE - GROUPBY CLAUSE

ABAPGROUPBY_CLAUSE - GROUPBY CLAUSE

PERFORM Short Reference   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

SELECT, GROUP BY

Kurzreferenz



... GROUP BY ${ ${ sql_exp1, sql_exp2 ...
                 grouping_sets1, grouping_sets2, ...$}
             $| (grouping_syntax) $} ...


Zusätze:

1. ... sql_exp1, sql_exp2, ...

2. ... grouping_sets1, grouping_sets2, ...

3. ... (grouping_syntax)

Wirkung

Der Zusatz GROUP BY fasst Gruppen von Zeilen der Ergebnismenge einer Query zu einer Zeile zusammen. Hinter GROUP BY werden die Gruppierungskriterien statisch oder dynamisch angegeben. Die statische Angabe ist eine kommaseparierte Liste aus:

Die Reihenfolge der SQL-Ausdrücke oder Gruppierungsmengen in der kommaseparierten Liste ist beliebig. Die dynamische Angabe erfolgt als eingeklammertes Datenobjekt grouping_syntax.

Die Verwendung von GROUP BY setzt voraus, dass in der SELECT-Liste nur einzelne Elemente col_spec, nicht jedoch alle Spalten über * angegeben sind. Wenn GROUP BY verwendet wird, müssen dort alle Spalten aufgeführt werden, die hinter SELECT direkt oder als Argument eines SQL-Ausdrucks und nicht als Argument einer Aggregatfunktion (außer der Gruppierungsfunktion) in einem Aggregatausdruck angegeben sind. Spalten, die nicht hinter GROUP BY aufgeführt sind, können hinter SELECT also nur als Argument einer Aggregatfunktion eines Aggregatausdrucks, mit Ausnahme der Gruppierungsfunktion, aufgeführt werden. Die Aggregatausdrücke legen fest, wie der Inhalt dieser Spalten in der zusammengefassten Zeile aus den Inhalten aller Zeilen einer Gruppe bestimmt wird. Für die Gruppierungsfunktion GROUPING muss hinter GROUP BY die Spalte aufgeführt werden, die als ihr Argument angegeben ist.

Die hinter GROUP BY angegebenen SQL-Ausdrücke dürfen nicht vom Typ STRING, RAWSTRING, LCHR, LRAW oder GEOM_EWKB sein.

Hinweise

  • Die Verwendung von GROUP BY und von Aggregatfunktionen sorgt dafür, dass Aggregate und Gruppen bereits vom Datenbanksystem und nicht erst vom AS ABAP gebildet werden. Dies kann erheblich zur Reduzierung der Datenmenge, die vom Datenbank- zum AS ABAP transportiert werden muss, beitragen.

Zusatz 1

... sql_exp1, sql_exp2, ...

Wirkung

Angabe von SQL-Ausdrücken, nach deren Ergebnis gruppiert wird. Eine Gruppe wird durch die Zeilen gebildet, die in allen SQL-Ausdrücken sql_exp1, sql_exp2, ... das gleiche Ergebnis haben. Jeder hinter GROUP BY angegebene SQL-Ausdruck muss in genau der gleichen Schreibweise auch an einer beliebigen Stelle der SELECT-Liste aufgeführt sein. Bei der Angabe einzelner Spalten col müssen die gleichen Spaltenbezeichner wie in der SELECT-Liste angegeben werden. Die Angabe von mit AS definierten Aliasnamen ist nicht möglich.

Die Angabe einer Spalte col als Operand eines SQL-Ausdrucks hinter GROUP BY wirkt bezüglich des Zusammenspiels mit der SELECT-Liste wie ihre einzelne Angabe. Eine Spalte, die in der SELECT-Liste kein Argument einer Aggregatfunktion ist, kann hinter GROUP BY einzeln oder als Operand eines SQL-Ausdrucks aufgeführt sein. Wenn eine solche Spalte als Operand eines SQL-Ausdrucks aufgeführt ist, muss sie nicht einzeln aufgeführt sein.

Hinter GROUP BY können alle in der SELECT-Liste möglichen SQL-Ausdrücke außer Aggregat- und Fensterausdrücken angegeben werden, mit folgenden Einschränkungen:

  • Jeder Ausdruck muss mindestens eine Spalte einer Datenquelle als Operand enthalten.
  • Die Ausdrücke dürfen keine Hostvariablen oder ABAP-Literale als Operand enthalten mit Ausnahme von statisch erkennbaren Konstanten oder Literalen vom Datentyp i oder mit flachem zeichenartigem Typ.

Hinweise

  • Wenn ein hinter GROUP BY angegebenes Gruppierungskriterium in der Ergebnismenge Null-Werte enthält, gehören diese nicht zur Gruppe der ABAP-spezifischen Initialwerte sondern bilden eine eigene Gruppe.
  • Wenn hinter GROUP BY direkt einzelne Spalten col aufgeführt sind, die in der SELECT-Liste in einem SQL-Ausdruck zusammengefasst sind, können mehrere Gruppen mit dem gleichen Ergebnis entstehen. Um dies zu verhindern, muss nach dem Ausdruck gruppiert werden.
  • Wenn Spaltenangaben einen Pfadausdruck für CDS-Assoziationen oder CTE-Assoziationen enthalten, müssen diese in der GROUP BY-Klausel und in der SELECT-Liste gleich sein, wobei auch Parameterübergaben und Attributangaben verglichen werden.
  • Die Schreibweise der Ausdrücke hinter GROUP BY und in der SELECT-Liste muss exakt übereinstimmen. Es genügt nicht, dass sie das gleich Ergebnis haben. Ein Ausdruck col1 + col2 hinter GROUP BY ist nicht gleichbedeutend zu einem Ausdruck col2 + col1 in der SELECT-Liste. Ein in der SELECT-Liste mit AS definierter Aliasname spielt aber keine Rolle.
  • Ein SQL-Ausdruck, der mehrfach außerhalb eines Aggregatausdrucks in der SELECT-Liste aufgeführt ist, muss nicht mehrfach hinter GROUP BY angegeben werden. Ein SQL-Ausdruck kann mehrfach hinter GROUP BY angegeben werden, was aber genauso wirkt, als sei er einmal angegeben.
  • Hinter GROUP BY kann statt eines Ausdrucks nicht der Aliasname angegeben werden, der in der Regel mit AS für den Ausdruck definiert ist.
  • Statt durch Kommata können ausschließlich direkte Spaltenangaben col1, col2, ... in einer obsoleten Form auch noch durch Leerzeichen separiert werden. In den strikten Modi der Syntaxprüfung ab Release müssen aber Kommata verwendet werden.
  • Wenn hinter GROUP BY andere SQL-Ausdrücken als direkte Spaltenangaben aufgeführt sind, wird die Syntaxprüfung in einem strikten Modus ausgeführt, welche die Anweisung strenger behandelt als die normale Syntaxprüfung.

Beispiel

Die Zeilen der DDIC-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.

Beispiel

Gruppierung nach einer Verkettung der Spalten CARRID und CONNID.

SELECT, GROUP BY für SQL-Ausdrücke

Zusatz 2

... grouping_sets1, grouping_sets2, ...

Wirkung

GROUPING SETS ist ein Zusatz der GROUP BY-Klausel mit dem sich mehrere Gruppierungsmengen grouping_sets1, grouping_sets2, ... unterhalb einer GROUP BY-Klausel definieren lassen. Die Gruppierungsmengen werden separat aggregiert und in einer Ergebnismenge zusammengeführt. For mehr Information siehe SELECT - GROUP BY, grouping_sets.

Zusatz 3

... (grouping_syntax)

Wirkung

Alternativ zur statischen Angabe kann ein eingeklammertes Datenobjekt grouping_syntax angegeben werden, das bei Ausführung der Anweisung die Syntax der Liste von SQL-Ausdrücken ausgenommen Hostausdrücke enthält oder initial ist. Für grouping_syntax gilt das Gleiche wie bei der dynamischen Spaltenangabe als SELECT-Liste.

Ist der Inhalt von grouping_syntax initial, werden entweder alle oder keine Zeilen zusammengefasst. Die Spalten der SELECT-Liste müssen dann entweder ausschließlich als Argumente von Aggregatfunktionen oder ausschließlich direkt bzw. als Argumente von SQL-Ausdrücken aufgeführt sein, andernfalls kommt es zur behandelbaren Ausnahme CX_SY_OPEN_SQL_DB. Ungültige Syntax führt zu einer behandelbaren Ausnahme der Klasse CX_SY_DYNAMIC_OSQL_ERROR.

Siehe SQL-Injections über dynamische Tokens.

Hinweise

  • Die Bedingungen für die Angabe von SQL-Ausdrücken hinter GROUP BY gelten insbesondere auch für dynamische Tokens und es wird zur Laufzeit überprüft, ob die Ausdrücke mit denen in der SELECT-Liste übereinstimmen.,
  • In aller Regel können in SQL-Ausdrücken in grouping_syntax keine Hostvariablen oder ABAP-Literale angegeben werden. Insbesondere darf nicht von außen auf statische Attribute oder Konstanten einer Klasse zugegriffen werden, wenn diese einen statischen Konstruktor hat und dieser noch nicht ausgeführt wurde.
  • Die Klasse CL_ABAP_DYN_PRG enthält Methoden, welche die Erstellung korrekter und sicherer dynamischer Spaltenangaben unterstützen.

Beispiel

Nach Eingabe einer beliebigen Spalte der DDIC-Datenbanktabelle SPFLI werden die selektierten Daten nach dieser Spalte gruppiert, d.h. dass gleiche Einträge zusammengefasst werden. In count wird die Anzahl der Flugverbindungen für die unterschiedlichen Werte in der Spalte spflicol bestimmt. Gibt man z.B. CITYFROM als spflicol ein, so wird in count die Anzahl der Ziele für jeden Abflugort bestimmt. In TRY-Kontrollstrukturen werden verschiedene mögliche Ausnahmen behandelt. Insbesondere wird die Benutzereingabe mit einer Methode der Klasse CL_ABAP_DYN_PRG auf ihre Gültigkeit überprüft.






CPI1466 during Backup   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14776 Date: 20240425 Time: 102930     sap01-206 ( 230 ms )