ABAP Keyword Documentation → ABAP - Reference → Processing External Data → ABAP - Database Accesses → Open SQL → Open SQL - Read Accesses → SELECT
SELECT - group
Other versions: 7.31 | 7.40 | 7.54
Syntax
... GROUP BY { {col1 col2 ...} | (column_syntax) } ... .
Effect
The addition GROUP BY
combines groups of rows that have the same content in their specified columns col1 col2 ...
in the resulting set into a single row.
The use of GROUP BY
has the prerequisite that
SELECT
only individual columns, not all the columns, are specified using
*
. If GROUP BY
is used, all columns that are specified directly after SELECT
and not specified as an argument of an
aggregate function
must be listed there. This means that columns not listed after GROUP BY
can
only be listed after SELECT
as the argument of an aggregate function. The
aggregate functions define how the content of these columns is determined in the combined row from the contents of all the rows of a group.
After GROUP BY
, the same
column identifiers must be specified as after
SELECT
. The specification can either be specified statically as a list
col1 col2 ... or dynamically as a brackted data object column_syntax
that - at execution of the statement - contains the syntax of the static specification or is set to
initial value. For column_syntax
, the same applies as for the dynamic specification of columns after SELECT
.
If the content of column_syntax
initial, either all the rows or no rows at
all are grouped together. The columns after SELECT
must then be listed either
solely as arguments of aggregate functions or solely directly. If not, this would trigger an exception CX_SY_OPEN_SQL_DB that can be handled.
Columns specified after GROUP BY
cannot be of the type STRING, or RAWSTRING.
Notes
-
With the use of
GROUP BY
, the statementSELECT
avoids the SAP buffering. -
Using
GROUP BY
and aggregate functions ensures that aggregates and groups are assembled by the database system, not the application server. This can considerably reduce the volume of data that has to be transported from the database to the application server. -
The class CL_ABAP_DYN_PRG contains methods that support the creation of correct and secure dynamic column specifications.
Example
The rows of database table SFLIGHT that have the same contents in column CARRID are combined. The lowest and highest values in column PRICE are determined for each of these groups and placed into the combined row.
DATA: carrid TYPE sflight-carrid,
minimum TYPE p DECIMALS 2,
maximum TYPE p DECIMALS 2.
SELECT carrid MIN( price ) MAX( price )
FROM sflight
INTO (carrid, minimum, maximum)
GROUP BY carrid.
WRITE: / carrid, minimum, maximum.
ENDSELECT.
Example
After entering any column of database table SPFLI the selected data is
organized according to this column, which means that similar entries are combined. In count
the number of flight connections for the different values in column spflicol
is determined. If you enter, for example, "cityfrom" as spflicol
, then the number of destinations for each departure city is determined in count
.
PARAMETERS spflicol TYPE c LENGTH 20.
DATA: dref TYPE REF TO data,
long_name TYPE string,
count TYPE i,
fieldlist TYPE string.
FIELD-SYMBOLS <fs> TYPE any.
long_name = 'spfli-' && spflicol.
CREATE DATA dref TYPE (long_name).
ASSIGN dref->* TO <fs>.
fieldlist = spflicol && ' count(*)'.
SELECT DISTINCT (fieldlist)
INTO (<fs>, count)
FROM spfli
GROUP BY (spflicol).
WRITE: / <fs>, count.
ENDSELECT.