Cláusula GROUP BY
La cláusula GROUP BY identifica las columnas de agrupación para la consulta. Se utiliza para agrupar las filas de una tabla que tienen los mismos valores en todas las columnas de la lista. No importa el orden en el que aparecen las columnas. El resultado es la combinación de cada conjunto de filas que tienen valores comunes en una fila de grupo que representa todas las filas del grupo. Utilice GROUP BY para eliminar la redundancia en la salida y calcular los agregados que se aplican a los grupos. Las columnas de agrupación deben declararse cuando la consulta computa las agregaciones con funciones estándar como SUM, AVG y COUNT. Para obtener más información, consulte Funciones de agregación.
Sintaxis
[ GROUP BY expression [, ...] | ALL | aggregation_extension ]
donde aggregation_extension es una de las siguientes opciones:
GROUPING SETS ( () | aggregation_extension [, ...] ) | ROLLUP ( expr [, ...] ) | CUBE ( expr [, ...] )
Parámetros
- expression
-
La lista de columnas o expresiones debe coincidir con la lista de expresiones no agregadas en la lista de selección de la consulta. Por ejemplo, considere la siguiente consulta simple.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by listid, eventid order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
En esta consulta, la lista de selección consta de dos expresiones agregadas. La primera usa la función SUM y la segunda usa la función COUNT. Las dos columnas restantes, LISTID y EVENTID, deben declararse como columnas de agrupación.
Las expresiones de la cláusula GROUP BY también pueden hacer referencia a la lista de selección a través de números ordinales. Por ejemplo, el caso anterior podría abreviarse de la siguiente manera.
select listid, eventid, sum(pricepaid) as revenue, count(qtysold) as numtix from sales group by 1,2 order by 3, 4, 2, 1 limit 5; listid | eventid | revenue | numtix -------+---------+---------+-------- 89397 | 47 | 20.00 | 1 106590 | 76 | 20.00 | 1 124683 | 393 | 20.00 | 1 103037 | 403 | 20.00 | 1 147685 | 429 | 20.00 | 1 (5 rows)
- ALL
-
ALL indica que se deben agrupar por todas las columnas especificadas en la lista SELECT, excepto las que están agregadas. Por ejemplo, considere la siguiente consulta, que agrupa por
col1
ycol2
sin tener que especificarlas individualmente en la cláusula GROUP BY. La columnacol3
es el argumento de la funciónSUM
y, por lo tanto, no está agrupada.SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
Si aplica EXCLUDE a una columna de la lista SELECT, la cláusula GROUP BY ALL no agrupa los resultados en función de esa columna específica.
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
- aggregation_extension
-
Puede utilizar las extensiones de agregación GROUPING SETS, ROLLUP y CUBE para realizar el trabajo de varias operaciones GROUP BY en una sola instrucción. Para obtener más información sobre las extensiones de agregación y las funciones relacionadas, consulte Extensiones de agregación.
Ejemplos
Los ejemplos siguientes utilizan la tabla SALES que contiene las columnas: salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission y saletime. Para obtener más información sobre la tabla SALES, consulte Base de datos de muestra.
En el siguiente ejemplo, se agrupan consultas por salesid
y listid
sin tener que especificarlas individualmente en la cláusula GROUP BY. La columna qtysold
es el argumento de la función SUM
y, por lo tanto, no está agrupada.
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;
salesid | listid | sum --------+---------+------ 33095 | 36572 | 2 88268 | 100813 | 4 110917 | 127048 | 1 ...
El siguiente ejemplo de consulta excluye varias columnas de la lista SELECT, por lo que GROUP BY ALL solo agrupa salesid y listid.
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime FROM sales GROUP BY ALL;
salesid | listid --------+--------- 33095 | 36572 88268 | 100813 110917 | 127048 ...