|
S.Q.L. Funciones de Grupo (I)
- AVG ([DISTINCT | ALL] n)
- COUNT ({* | [DISTINCT | ALL |] expr})
- Cantidad de filas con expr no nulo. Con * se cuentan todas las filas incluyendo duplicadas y valores nulos.
- MAX ([DISTINCT | ALL] expr)
- MIN ([DISTINCT | ALL] expr)
- Valor mínimo de expr., ignorando los valores nulos.
S.Q.L. Funciones de Grupo (II)
- STDDEV ([DISTINCT | ALL] n)
- Desviación estándar de n, ignorando los valores nulos.
- SUM ([DISTINCT | ALL] n)
- Suma los valores de n, ignorando los valores nulos.
- VARIANCE ([DISTINCT | ALL] n)
- Varianza de n, ignorando los valores nulos
- Estas funciones no se pueden usar en la cláusula WHERE.
S.Q.L. Funciones de grupo y Nulos
- Las funciones de grupo IGNORAN los valores nulos de las columnas.
- ¿Qué resultado obtendríamos se calculamos la media de la comisión de los empleados?
S.Q.L. NVL y funciones de grupo
- Esta media no es correcta porque se han ignorado las filas cuya comisión es nula.
- Solución: Uso de la función NVL para forzar a las funciones de grupo que admitan los valores nulos.
S.Q.L. Sintaxis de GROUP BY
- Crea grupo de datos, por lo tanto se pueden usar funciones de grupo para devolver información resumida para cada grupo.
S.Q.L. Uso de GROUP BY (I)
- Si se incluye una función de grupo en una cláusula SELECT, no se puede seleccionar resultados individuales a menos que la columna aparezca en la cláusula GROUP BY.
- No se pueden usar alias en GROUP BY.
- Por defecto, tras un GROUP BY, las filas se ordenan de forma ascendente
- Ejemplo:
>SQL> SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;
S.Q.L. Uso de GROUP BY (II)
- La columna referenciada por GROUP BY no es necesario seleccionarla.
- Todas las columnas mencionadas en la SELECT que no son funciones de grupo, tienen que estar en la cláusula GROUP BY.
- Se pueden formar agrupaciones sobre múltiples columnas:
>SQL> SELECT deptno, job, sum(sal) FROM emp GROUP BY deptno, job;
S.Q.L. Consultas no válidas
- Cualquier columna o expresión en la SELECT que no sea una función agregada, tiene que ser especificada en la cláusula GROUP BY
SQL> SELECT deptno, COUNT(ename) FROM emp;
- No puede usar una cláusula WHERE para restringir grupos. Utilice la cláusula HAVING para restringir grupos.
SQL> SELECT deptno, AVG(sal) FROM emp WHERE AVG(sal) > 2000 GROUP BY deptno;
S.Q.L. Cláusula HAVING
- Use la cláusula HAVING para restringir grupos:
- Los registros son agrupados
- Se aplica la función de grupo
- Los grupos que se corresponden con la cláusula HAVING se visualizan (condición TRUE).
- HAVING puede preceder a GROUP BY, pero se recomienda que se ponga en primer lugar GROUP BY porque es más lógico. (1º se calculan grupos y posteriormente se calcula HAVING sobre esos gpos.).
S.Q.L. Sintaxis de HAVING
|