Kategorien:

Aggregatfunktionen (Allgemein)

GROUPING_ID

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

Alias für GROUPING.

Syntax

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

Nutzungshinweise

GROUPING_ID 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_ID(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_ID(Ausdruck1, Ausdruck2, …, AusdruckN) gibt die Ganzzahldarstellung eines Bitvektors zurück, der GROUPING_ID(Ausdruck1), GROUPING_ID(Ausdruck2), …, GROUPING_ID(AusdruckN) enthält.

Beispiele

In den Beispielen werden folgende Tabelle und Daten verwendet:

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);

In diesem Beispiel wird anhand von col_x gruppiert. Der Aufruf von GROUPING_ID(col_x) gibt 0 zurück, was bedeutet, dass col_x tatsächlich eine der Gruppierungsspalten ist.

SELECT col_x, sum(col_z), GROUPING_ID(col_x)
    FROM aggr2 
    GROUP BY col_x
    ORDER BY col_x;
+-------+------------+--------------------+
| COL_X | SUM(COL_Z) | GROUPING_ID(COL_X) |
|-------+------------+--------------------|
|     1 |          4 |                  0 |
|     2 |         24 |                  0 |
+-------+------------+--------------------+

Diese Abfrage gruppiert anhand von Gruppen:

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