- Kategorien:
Aggregationsfunktionen (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:
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(
expr
) gibt 0 bei einer Zeile zurück, die fürexpr
gruppiert ist, und 1 bei einer Zeile, die nicht fürexpr
gruppiert ist.GROUPING(
expr1
,expr2
, … ,exprN
) gibt die Ganzzahldarstellung eines Bitvektors zurück, der GROUPING(expr1
), GROUPING(expr2
), … , GROUPING(exprN
) 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 | +-------+-------+------------+-----------------+-----------------+------------------------+