De agregaciónestándar SQL

GROUPING

Indica si una fila es un subtotal de ROLLUP o CUBE para una columna: 1 — subtotal, 0 — grupo normal.

Sintaxis

GROUPING(<columna>)
GROUPING(<columna1>, <columna2>, …)

ROLLUP añade al informe filas de subtotal en las que la columna de agrupación pasa a ser NULL. Pero NULL también puede ser un valor real, así que por él no se distingue un subtotal de un grupo «sin departamento». GROUPING da 1 justo en la fila de subtotal: con ella se rotula «Total».

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Un subtotal marcado por GROUPING
SELECT department,
SUM(salary) AS payroll,
GROUPING(department) AS is_total
FROM employees
GROUP BY ROLLUP (department)
ORDER BY is_total, department;
departmentpayrollis_total
backend22000
design12000
frontend23000
NULL57001
La etiqueta Total en lugar de NULLAvanzado
SELECT CASE WHEN GROUPING(department) = 1 THEN 'Total' ELSE department END AS department,
SUM(salary) AS payroll
FROM employees
GROUP BY ROLLUP (department)
ORDER BY GROUPING(department), department;
departmentpayroll
backend2200
design1200
frontend2300
Total5700

Ten en cuenta

Sin ROLLUP, CUBE ni GROUPING SETS, todas las filas son normales y GROUPING siempre da 0.

El argumento debe ser una columna de GROUP BY: si no, obtendrás arguments to GROUPING must be grouping expressions of the associated query level.

Con varias columnas, el resultado es una máscara de bits: GROUPING(a, b) da 0, 1, 2 o 3. Es más sencillo llamar a GROUPING por separado para cada columna.

Funciones relacionadas