viernes, 30 de diciembre de 2011

TEMA 5. CLAUSULAS AVANZADAS DE SELECCIÓN.

.
1.       AGRUPACION DE ELEMENTOS. GROUP BY Y HAVING.
A veces nos interesa consultar los datos según grupos determinados. Para realizar el agrupamiento utilizaremos la clausula GROUP BY.
La sentencia SELECT posibilita agrupar uno o mas conjuntos de filas. El agrupamiento se lleva a cabo en en orden especificado, según su formato:

SELECT…
FROM…
GROUP BY columna1,columna2,columna3…
HAVING condicion
ORDER BY…

Los datos seleccionados en la sentencia SELECT que lleva el GROUP BY deben ser: una constant, una function de grupo (SUM,COUNT,AVG…), una columna expresada en el GROUP BY.
La clausula GROUP BY sirve para calcula propiedades de uno o mas conjuntos de filas. Del mismo modo que existe la condición de búsqueda WHERE para filas individuales, la condición HAVING, se utilizara para condición de búsqueda de grupos de filas.
HAVING se emplea para controlar cual de los conjuntos de filas se visualiza. Se evalua sobre la tabla que devuelve el GROUP BY. El HAVING nunca existirá sin existir GROUP BY.

EJEMPLO:
Visualizar a partir de la tabla EMPLE el numero de empleados que hay en cada departamento.
Para hacer esta consulta,tenemos que agupar las filas de la tabla EMPLE por departamento (GROUP BY DEPT_NO) y contarlas (COUNT(*)).La consulta será:

SELECT DEPT_NO, COUNT(*) FROM EMPLE GROUP BY DEPT_NO;

COUNT  es una function de grupo y da informacion sobre un grupo de filas, no sobre filas individuals de la tabla. La clausula GROUP BY DEPT_NO, obliga a COUNT a contar las filas que se han agrupado por cada departamento.

Si en la anterior consulta solo queremos visualizar los departamentos con mas de 4 empleados, tendíamos que escribir:

SELECT DEPT_NO, COUNT(*) FROM EMPLE GROUP BY DEPT_NO HAVING COUNT(*)>4;

No hay comentarios:

Publicar un comentario