La declaración GROUP BY <Campos de agrupación> te permite describir el orden de agrupación de los resultados de la consulta.
Los datos iniciales en la consulta se pueden agrupar utilizando funciones de agregación especificadas como campos en la lista de selección. Esto significa que las filas de resultados de la consulta contendrán los resultados de las funciones de agregación especificadas calculadas (agrupadas) de acuerdo con los registros de las tablas de origen.
Especifica las funciones de agregación en la lista de campos de selección; en la declaración GROUP BY <Campos de agrupación> debes especificar una lista de campos por los que agrupar. La consulta agrupará los registros de las tablas de origen con los mismos valores de los campos especificados.
Puedes usar expresiones booleanas en esta cláusula.
La lista de campos de agrupación contiene enlaces a los campos de las tablas de origen: fuentes de la consulta, separados por comas:
GROUP BY <Campos de agrupación> | |||||
| | |||||
<Nombre del campo> [, <Nombre del campo> [, …]] |
¡Importante! Al agrupar los resultados de la consulta, la lista de campos de selección puede contener funciones de agregación (obligatorias) y solo campos de agrupación.
La excepción es cuando se aplican funciones de agregación a los campos de una tabla anidada. En este caso, en la lista de campos de selección, es posible acceder a los campos de la tabla de nivel superior sin agrupar los resultados por estos campos.
Cuando se usan funciones de agregación, la declaración GROUP BY puede no indicarse en absoluto; todos los resultados de la consulta se agruparán en una sola línea.
Ejemplo:
// Se requiere obtener estadísticas sobre la venta de productos:
// precios máximos, mínimos y promedio en notas de entrega.SELECT
Nota de entrega.Producto,
PROMEDIO (Nota de entrega.Precio) AS Promedio,
MAXIMO (Nota de entrega.Precio) AS MAXIMO,
MINIMO (Nota de entrega.Precio) AS MinimoFROM
Documento.Factura.Contenido AS FacturaGROUP BY
Nota de entrega.Producto
Resultado de la consulta:
Producto
Promedio
Máximo
Mínimo
Pantalones para niños
1 500
1 500
1 500
Camisa “Cowboy”
800
800
800
Jeans de mujer
1 520
1 700
1 500
Suéter para niños
800
800
800
Fregadero “Lily”
2 250
2 500
2 000
Moydodyr “Aquarium”
3 166
4 000
2 000
Mezcladora “Ultra”
1 500
1 500
1 500
Procesador de alimentos Krups
1 500
1 500
1 500
GROUP BY GROUPING SETS (Agrupación por varios grupos)
Para tablas de nivel superior, se admite el diseño GROUP BY GROUPING SETS, diseñado para agrupar en varios grupos en un solo escaneo de tabla.
El diseño GROUP ALL BY GROUPING SETS es equivalente al diseño COMBINE ALL con las consultas GROUP BY para los grupos indicados. Los campos en la lista de selección que no pertenecen al grupo actual se reemplazan por NULL.
GROUP BY GROUPING SETS ((CamposGrupo1)[, (CamposGrupo2)[,…]]) |
¡Importante! No se admite el uso de expresiones con dos o más campos en la lista de selección que correspondan a dos o más agrupaciones.
Si seleccionas GROUP BY GROUPING SETS en la declaración ORDER BY, solo puedes usar expresiones de la lista de selección.
Los operadores no son equivalentes:
GROUP BY GROUPING SETS ((RegistroDeHorarioDelPersonal. Departamento, RegistroDeHorarioDelPersonal. Cargo));
y
GROUP BY GROUPING SETS(RegistroDeHorarioDelPersonal. Departamento, RegistroDeHorarioDelPersonal. Cargo);
Ejemplo:
SELECT
SaldoInventario.Producto AS Producto,
SaldoInventario.Almacén AS Almacén,
CANTIDAD(SaldoInventario.CantidadSaldo) AS CantidadSaldo
FROM
RegistroDeAcumulación.SaldoInventario AS SaldoInventario
GROUP BY GROUPING SETS
(
(SaldoInventario.Almacén),
(SaldoInventario.Producto),
(SaldoInventario.Producto, SaldoInventario.Almacén)
El resultado de la consulta incluirá los resultados de las tres consultas (o una consulta combinada). Por lo tanto, se hace referencia a otras formas de obtener resultados. En primer lugar, se trata de aumentar la velocidad de obtención del resultado y la productividad.