Kategorien:

Aggregatfunktionen (Allgemein)

GROUPING

Beschreibt, welche Ausdrücke aus einer Liste von Ausdrücken in einer Zeile gruppiert werden, die durch eine GROUP BY-Abfrage erzeugt wurde.

Aliasse:

GROUPING_ID

Syntax

GROUPING( <expr1> [ , <expr2> , ... ] )

Nutzungshinweise

GROUPING ist keine Aggregatfunktion, sondern eine Hilfsfunktion, die zusätzlich zur Aggregation verwendet werden kann, um die Aggregationsebene zu bestimmen, für die eine Zeile generiert wurde:

  • GROUPING(Ausdruck) gibt 0 bei einer Zeile zurück, die für Ausdruck gruppiert ist, und 1 bei einer Zeile, die nicht für Ausdruck gruppiert ist.

  • GROUPING(Ausdruck1, Ausdruck2, …, AusdruckN) gibt die Ganzzahldarstellung eines Bitvektors zurück, der GROUPING(Ausdruck1), GROUPING(Ausdruck2), …, GROUPING(AusdruckN) enthält.

Beispiele

Gruppieren nach Sets:

Erstellen Sie eine Tabelle, und füllen Sie diese mit Werten:

CREATE OR REPLACE TABLE aggr2(col_x int, col_y int, col_z int);
INSERT INTO aggr2 VALUES(1, 2, 1), (1, 2, 3);
INSERT INTO aggr2 VALUES(2, 1, 10), (2, 2, 11), (2, 2, 3);

Zeigen Sie die Werte in der Tabelle an:

SELECT * FROM aggr2 ORDER BY col_x, col_y, col_z;
+-------+-------+-------+
| COL_X | COL_Y | COL_Z |
|-------+-------+-------|
|     1 |     2 |     1 |
|     1 |     2 |     3 |
|     2 |     1 |    10 |
|     2 |     2 |     3 |
|     2 |     2 |    11 |
+-------+-------+-------+

Ausgabe:

SELECT col_x, col_y, sum(col_z), 
       grouping(col_x), grouping(col_y), grouping(col_x, col_y)
    FROM aggr2 GROUP BY GROUPING SETS ((col_x), (col_y), ())
    ORDER BY 1, 2;
+-------+-------+------------+-----------------+-----------------+------------------------+
| COL_X | COL_Y | SUM(COL_Z) | GROUPING(COL_X) | GROUPING(COL_Y) | GROUPING(COL_X, COL_Y) |
|-------+-------+------------+-----------------+-----------------+------------------------|
|     1 |  NULL |          4 |               0 |               1 |                      1 |
|     2 |  NULL |         24 |               0 |               1 |                      1 |
|  NULL |     1 |         10 |               1 |               0 |                      2 |
|  NULL |     2 |         18 |               1 |               0 |                      2 |
|  NULL |  NULL |         28 |               1 |               1 |                      3 |
+-------+-------+------------+-----------------+-----------------+------------------------+