Tema 4. Las consultas de resumen (II) |
|
|
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 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.
|
|

|
|
¿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.
|
|
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
|
|
|