La forma general de la declaración SELECT es mejorar con la adición de
la clausula HAVING:
SELECT column | expression |
group_function( column | expression [ alias ] ) ,… )
FROM table
[ WHERE condition(s) ]
[ GROUP BY { col(s) | expr } ]
[ HAVING group_condition(s) ]
[ ORDER BY { col(s) | expr | numeric_pos} [ ASC | DESC ] [ NULLS FIRST
| LAST ] ];
Una importante diferencia entre la clausula HAVING y otra clausula de
la sentencia SELECT es que puede solo ser especificada si una clausula GROUP BY
está presente. Esta dependencia es sensible debido a que filas de nivel grupo después
que son restringidas. La clausula HAVING puede aparecer después de la clausula
GROUP BY en la sentencia SELECT. Sin embargo, es mas común ubicar la clausula
HAVING antes de la clausula GROUP BY. Todo el agrupamiento y ejecución de
funciones grupo son ejecutados antes de evaluar la clausula HAVING.
La siguiente consulta muestra como la clausula HAVING es utilizada
para restringir un conjunto de datos agregados. Filas de la tabla JOB_HISTORY
son divididos en cuatro grupos. Las filas que satisfacen la condición de la
clausula HAVING son devueltas:
SELECT department_id, job_id, count(*) total
FROM job_history
GROUP BY department_id, job_id
HAVING COUNT(*) > 1
ORDER BY department_id, job_id;
SELECT job_id, ROUND(AVG(salary),2) PROMEDIO_SALARIO, COUNT(*)
FROM employees
GROUP BY job_id
HAVING AVG(salary) > 10000 AND COUNT(*) > 1;
La clausula HAVING puede solo ser especificada cuando una clausula
GROUP BY está presente. Una clausula GROUP BY puede ser especificada sin una
clausula HAVING. Condiciones múltiples pueden ser impuestas en la clausula HAVING utilizando
operadores AND, OR y NOT. La clausula HAVING restringe los datos a nivel grupo
y debe contener una función grupo o una expresión que utilice una.
Comentarios
Publicar un comentario