27 de enero de 2012

Cláusula Having en MySQL


Logotipo Delfines MySQL


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.
Esta Consulta nos arroja el siguiente resultado:

         Comercial                SUM(BeneficioRecaudado
   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).