Página inicial  

Tema 4. Las consultas de resumen (II)

Google

La cláusula GROUP BY



Hasta ahora las consultas de resumen que hemos visto utilizan todas las filas de la tabla y producen una única fila resultado.


Se pueden obtener subtotales con la cláusula GROUP BY. Una consulta con una cláusula GROUP BY se denomina consulta agrupada ya que agrupa los datos de la tabla origen y produce una única fila resumen por cada grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de agrupación.

Ejemplo:

SELECT SUM(ventas)
FROM repventas

Obtiene la suma de las ventas de todos los empleados.

SELECT SUM(ventas)
FROM repventas
GROUP BY oficina

Se forma un grupo para cada oficina, con las filas de la oficina, y la suma se calcula sobre las filas de cada grupo. El ejemplo anterior obtiene una lista con la suma de las ventas de los empleados de cada oficina.

La consulta quedaría mejor incluyendo en la lista de selección la oficina para saber a qué oficina corresponde la suma de ventas:

SELECT oficina,SUM(ventas)
FROM repventas
GROUP BY oficina

Un columna de agrupación no puede ser de tipo memo u OLE.

La columna de agrupación se puede indicar mediante un nombre de columna o cualquier expresión válida basada en una columna pero no se pueden utilizar los alias de campo.

Ejemplo:

SELECT importe/cant , SUM(importe)
FROM pedidos
GROUP BY importe/cant

Está permitido, equivaldría a agrupar las líneas de pedido por precio unitario y sacar de cada precio unitario el importe total vendido.

SELECT importe/cant AS precio, SUM(importe)
FROM pedidos
GROUP BY precio

No está permitido, no se puede utilizar un alias campo.

En la lista de selección sólo pueden aparecer :
valores constantes
funciones de columna
columnas de agrupación
(columnas que aparecen en la cláusula GROUP BY)
o cualquier expresión basada en las anteriores.

SELECT SUM(importe),rep*10
FROM pedidos
GROUP BY rep*10

Está permitido

SELECT SUM(importe),rep
FROM pedidos
GROUP BY rep*10

No está permitido, rep es una columna simple que no está encerrrada en una función de columna, ni está en la lista de columnas de agrupación.

Se pueden agrupar las filas por varias columnas, en este caso se indican las columnas separadas por una coma y en el orden de mayor a menor agrupación. Se permite incluir en la lista de agrupación hasta 10 columnas.

Ejemplo: Queremos obtener la suma de las ventas de las oficinas agrupadas por region y ciudad:

SELECT SUM(ventas)
FROM oficinas
GROUP BY region,ciudad

Se agrupa primero por región, y dentro de cada región por ciudad.

Todas las filas que tienen valor nulo en el campo de agrupación, pasan a formar un único grupo. Es decir, considera el valor nulo como un valor cualquiera a efectos de agrupación.

Ejemplo:

SELECT oficina,SUM(ventas) AS ventas_totales
FROM repventas
GROUP BY oficina

En el resultado aparece una fila con el campo oficina sin valor y a continuación una cantidad en el campo ventas_totales, esta cantidad corresponde a la suma de las ventas de los empleados que no tienen oficina asignada (campo oficina igual a nulo).

La cláusula HAVING



La cláusula HAVING nos permite seleccionar filas de la tabla resultante de una consulta de resumen.

Para la condición de selección se pueden utilizar los mismos tests de comparación descritos en la cláusula WHERE, también se pueden escribir condiciones compuestas (unidas por los operadores OR, AND, NOT), pero existe una restricción.

En la condición de selección sólo pueden aparecer :
valores constantes
funciones de columna
columnas de agrupación
(columnas que aparecen en la cláusula GROUP BY)
o cualquier expresión basada en las anteriores.

Ejemplo: Queremos saber las oficinas con un promedio de ventas de sus empleados mayor que 500.000 ptas.

SELECT oficina
FROM empleados
GROUP BY oficina
HAVING AVG(ventas) > 500000

NOTA: Para obtener lo que se pide hay que calcular el promedio de ventas de los empleados de cada oficina, por lo que hay que utilizar la tabla empleados.Tenemos que agrupar los empleados por oficina y calcular el promedio para cada oficina, por último nos queda seleccionar del resultado las filas que tengan un promedio superior a 500.000 ptas.

Resumen del tema

¿Cómo se ejecuta internamente una consulta de resumen?

- Primero se forma la tabla origen de datos según la cláusula FROM,
- se seleccionan del origen de datos las filas según la cláusula WHERE,
- se forman los grupos de filas según la cláusula GROUP BY,
- por cada grupo se obtiene una fila en la tabla resultante con los valores que aparecen en las cláusulas GROUP BY, HAVING y en la lista de selección,
- se seleccionan de la tabla resultante las filas según la cláusula HAVING,
- se eliminan de la tabla resultante las columnas que no aparecen en la lista de selección,
- se ordenan las filas de la tabla resultante según la cláusula ORDER BY

Una consulta se convierte en consulta de resumen en cuanto aparece GROUP BY, HAVING o una función de columna.

En una consulta de resumen, la lista de selección y la cláusula HAVING sólo pueden contener:
valores constantes
funciones de columna
columnas de agrupación (columnas que aparecen en la cláusula GROUP BY)
o cualquier expresión basada en las anteriores.

Ejercicios propuestos





 
Pag. 4.2
Aviso legal: este curso es gratuito siempre que se visualice desde la página web de aulaClic. No está permitido descargar el curso ni utilizarlo en academias o centros de enseñanza privados sin estar conectado a Internet.
© aulaClic. Todos los derechos reservados. Free Computer tutorials . Prohibida la reproducción por cualquier medio.
Junio-2001.aulaClic.com