Categorias:

Funções de agregação (General)

GROUPING_ID

Descreve quais de uma lista de expressões estão agrupadas em uma linha produzida por uma consulta GROUP BY.

Alias para GROUPING.

Sintaxe

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

Notas de uso

GROUPING_ID não é uma função agregada, mas sim uma função de utilidade que pode ser usada junto com a agregação para determinar o nível de agregação para o qual uma linha foi gerada:

  • GROUPING_ID(expr) retorna 0 para uma linha que está agrupada em expr, e 1 para uma linha que não está agrupada em expr.

  • GROUPING_ID(expr1, expr2 , … , exprN) retorna a representação inteira de um vetor de bit contendo GROUPING_ID(expr1), GROUPING_ID(expr2) , … , GROUPING_ID(exprN).

Exemplos

Os exemplos utilizam a seguinte tabela e dados:

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

Este exemplo faz o agrupamento em col_x. Chamar GROUPING_ID(col_x) retorna 0, indicando que col_x é de fato uma das colunas de agrupamento.

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 | +-------+------------+--------------------+ 
Copy

Esta consulta agrupa por conjuntos:

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 ASC, col_y DESC; +-------+-------+------------+--------------------+--------------------+---------------------------+ | 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 | +-------+-------+------------+--------------------+--------------------+---------------------------+ 
Copy