Índice

Consultas agrupadas



Una consulta agrupada se utiliza para considerar los registros cuyos ciertos campos tienen el mismo valor, y procesarlos de la misma manera, para contarlos, sumarlos, hacer la media etc.

SELECT C_CLIENTE, SUM(IMPORTE)
FROM FACTURA
GROUP BY C_CLIENTE;

Un error muy común cuando se construyen consultas agrupadas, es el siguiente: ORA- 00979: not a GROUP BY expresión. Esto es debido al modo que tiene Oracle de analizar las consultas agrupadas:

Lo que hace es comprobar que todos las columnas incluidos en la cláusula SELECT fuera de funciones sumarias, estén dentro de la cláusula GROUP BY, aunque pueden estar en cualquier orden y en el GROUP BY pueden aparecer columnas que no estén en el SELECT. Si encuentra alguna columna en el SELECT (que no esté dentro de una función sumaria) que no aparezca en el GROUP BY, entonces nos retorna el error anterior.

ORDER BY

Como característica adicional, se pueden incluir números en la ordenación, que serán sustituidos por la columna correspondiente del SELECT en el orden que indique el número. La ordenación es el último paso en la ejecución de una consulta SQL, y para ello Oracle suele necesitar crear objetos temporales que son creados en el tablespace Temporal. Por eso es recomendable hacer las ordenaciones del lado de cliente (siempre que sea posible), ya que el servidor puede cargarse bastante si tiene que hacer, por ejemplo, 300 ordenaciones de tablas de 2 millones de registros.

GROUP BY

Agrupa las filas seleccionadas por la cláusula WHERE por los campos que aparecen en la cláusula GROUP BY. Estos grupos devuelven una única fila por grupo a la que se le pueden añadir una serie de funciones estadísticas llamadas agregados. Su sintaxis es:

GROUP BY <group_by_expression>

donde <group> es la columna o columnas por la cuales se desea agrupar. No se puede utilizar un alias de dicha columna. Se puede agrupar mediante una expresión formada por varias columnas. Es importante recordar que las columnas que aparecen en el group by deberían también de aparecer tras la palabra SELECT (excepto casos especiales). Ejemplo de GROUP BY, se desea obtener el número de portes de cada camión, y si un camión no ha tenido portes que dicho valor aparezca a nulo:

SELECT camion.cCmnMtr, camion.cCmnMrc, camion.cCmnMdl, COUNT(*)
FROM camion, porte
WHERE camion.cCmnMtr = porte.cCmnMtr
GROUP BY camion.cCmnMtr, camion.cCmnMrc, camion.cCmnMdl;

Ejemplo donde agrupamos por una expresión carácter formada por tres columnas o campos:

SELECT camion.cCmnMtr +camion.cCmnMrc + camion.cCmnMdl, COUNT(*)
FROM camion, porte
WHERE camion.cCmnMtr = porte.cCmnMtr
GROUP BY camion.cCmnMtr + camion.cCmnMrc + camion.cCmnMdl;

Funciones de Agregado

Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros para devolver un único valor que se aplica a un grupo de registros. También se utilizan para obtener resultados estadísticos sobre las columnas de una tabla o sobre la misma tabla; en este caso, la consulta devuelve un solo registro con los resultados.

Select Count(*) From LiFacturas;
Select Sum(Stock) From Articulos Where Familia = CPU;

Los más utilizados son:

Siguiente Tema: Consulta de Datos - Cláusula HAVING y ORDER BY