Componentes de GROUP BY
La cláusula GROUP BY contiene los siguientes componentes:
- Una o más expresiones sin agregados. Normalmente, suelen ser referencias a las columnas de agrupación.
- Opcionalmente, la palabra clave ALL, que especifica que se devuelvan todos los grupos generados por la cláusula GROUP BY, incluso si alguno de los grupos no tiene filas que cumplan las condiciones de búsqueda.
- CUBE o ROLLUP.
- Normalmente, la cláusula HAVING se usa junto con la cláusula GROUP BY, aunque también se puede especificar sin ella.
Puede agrupar por una expresión siempre que no incluya funciones de agregado. Por ejemplo:
SELECT DATEPART(yy, HireDate) AS Year,
COUNT(*) AS NumberOfHires
FROM AdventureWorks.HumanResources.Employee
GROUP BY DATEPART(yy, HireDate)
Éste es el conjunto de resultados.
Year NumberOfHires
----------- -------------
1997 2
2001 21
2000 45
1996 1
2003 3
1999 198
1998 16
2002 4
(8 row(s) affected)
En una cláusula GROUP BY, debe especificar el nombre de una columna de tabla o vista, no el nombre de una columna del conjunto de resultados asignada con una cláusula AS. Por ejemplo, no se puede reemplazar la cláusula GROUP BY DATEPART(yy, HireDate) por una cláusula GROUP BY Year.
Puede enumerar más de una columna en la cláusula GROUP BY para anidar grupos; es decir, puede agrupar una tabla con cualquier combinación de columnas. Por ejemplo, en esta consulta se busca el precio promedio y la suma de las ventas del año hasta la fecha actual, agrupados por Id. de producto e Id. de oferta especial.
USE AdventureWorks;
GO
SELECT ProductID, SpecialOfferID, AVG(UnitPrice) AS 'Average Price',
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY ProductID, SpecialOfferID
ORDER BY ProductID
GO