La cláusula HAVING es una implemetacion que el sistema gestor de bases de datos MySQL crea para complementar el condicionante WHERE, ya que el condicionante WHERE no permite utilizar funciones de agregación como SUM, MAX, MIN o AVG, es decir, con un condicionante WHERE no podemos crear consultas válidas que sean capaz de devolvernos los datos de los clientes que compraron más de 1000 productos durante un año, por ejemplo.
Para poder hacer una búsqueda en los datos almacenados en MySQL donde el condicionante sea una calculo aritmético necesitamos de la cláusula HAVING.
Pongamos un ejemplo que nos ayude a entender el funcionamiento de la cláusula HAVING:
Partimos de la tabla Recaudacion que tiene las siguientes tuplas:
id_Recaudacion Comercial BeneficioRecaudado
1 Juan 100.000
2 Lucas 125.000
3 Ana 75.000
4 Jose 150.000
5 Juan 80.000
6 Lucas 80.000
Queremos crear una consulta que nos devuelva el nombre de los comerciales que han recaudado un beneficio superior a los 175.000 €.
La consulta en MySQL es la siguiente:
SELECT Comercial, SUM(BeneficioRecaudado) FROM Recaudacion GROUPBY Comercial HAVING SUM(BeneficioRecaudado)>175.000;
Con esta consulta SQL estamos realizando las siguientes acciones:
- Agrupamos los datos resultanes en funcion del campo Comercial.
- Sumamos los beneficios recaudados de cada Comercial.
- Comprueba que esa suma sea mayor que la condición de la cláusula HAVING, que sea mayor de 175.000.
Comercial SUM(BeneficioRecaudado
Juan 180.000
Lucas 205.000
Juan 180.000
Lucas 205.000
En conclusión, la cláusula HAVING nos sirve para filtrar los datos de una consulta a través de funciones de agregación( MAX, AVG, SUM, MIN).