martes, 8 de noviembre de 2016

HAVING





La cláusula WHERE no se puede utilizar para restringir grupos. La sentencia SELECT de la diapositiva da como resultado un error porque utiliza la cláusula WHERE para restringir la visualización de salarios medios de los departamentos que tienen un salario medio superior a 8.000 dólares.
Tener muy en cuenta:
  1. No puede utilizar la cláusula WHERE para restringir grupos. 
  2. Utilice la cláusula HAVING para restringir grupos. 
  3. No puede utilizar funciones de grupo en la cláusula WHERE

SELECT   department_id, AVG(salary) 
   FROM    employees 
WHERE    AVG(salary) > 8000 
GROUP BY department_id ;

ERROR at line 3: 
ORA-00934: group function is not allowed here 

Puede corregir el error del ejemplo si utiliza la cláusula HAVING para restringir grupos.
   
  SELECT  department_id, AVG(salary)
     FROM   employees
  HAVING  AVG(salary) > 8000

   GROUP BY department_id ;

Restricción de Resultados de Grupos 
De la misma forma que utiliza la cláusula WHERE para restringir las filas que se seleccionarán, utilice la cláusula HAVING para restringir grupos. Para buscar el salario máximo de cada departamento que tenga un salario máximo superior a 10.000 dólares, necesita: 
1. Buscar el salario medio de cada departamento agrupando por número de departamento. 
2. Restringir los grupos a los departamentos con un salario máximo superior a 10.000 dólares.

Si se utiliza la cláusula HAVING, Oracle Server restringe los grupos así:
1. Se agrupan las filas. 
2. Se aplica la función de grupo. 
3. Se muestran los grupos que satisfacen la cláusula HAVING

Restricción de Resultados de Grupos con la Cláusula HAVING 

Utilice la cláusula HAVING para especificar los grupos que se deben mostrar, con los que se restringen más los grupos basándose en la información de agregación. 
En la sintaxis, group_condition restringe los grupos de filas devueltas a los grupos para los que es verdadera la condición especificada. 

Oracle Server sigue estos pasos si se utiliza la cláusula HAVING
1. Se agrupan las filas. 
2. Se aplica al grupo la función de grupo. 
3. Se muestran los grupos que satisfacen los criterios de la cláusula HAVING
La cláusula HAVING puede ir delante de la cláusula GROUP BY, pero se recomienda poner primero la cláusula GROUP BY, porque resulta más lógico. Se forman los grupos y se calculan las funciones de grupo antes de que se aplique la cláusula HAVING a los grupos de la lista SELECT

SELECT   job_id, SUM(salary) PAYROLL 
   FROM    employees 
WHERE    job_id NOT LIKE '%REP%' 
GROUP BY job_id 
HAVING   SUM(salary) > 13000 
ORDER BY SUM(salary);

El ejemplo  muestra el identificador de trabajo y el salario mensual total de cada trabajo que tiene una nómina total superior a 13.000 dólares. El ejemplo excluye a los representantes de venta y ordena la lista por salario mensual total. 




Share:

0 comentarios:

Publicar un comentario

Archivo

Cual es el tema de mayor interes para ti?