El Blog de over…

diciembre 25, 2007

Diferencia entre la clausula WHERE y HAVING en SQL

Filed under: ./base\ de\ datos — elblogdeover @ 6:42 pm

Es importante entender la forma en como las clausulas WHERE y HAVING actuan sobre las funciones de agregacion y agrupacion en SQL, la diferencia fundamental entre WHERE y HAVING es la siguente: WHERE selecciona las filas a mostrar antes de que sean agrupadas o procesadas por una funcion de agregacion, mientras HAVING selecciona las filas despues de que estas hayan sido procesadas o computadas, por lo tanto, la clausula WHERE no debe contener funciones de agrupacion o agregacion, mientras que la clausula HAVING siempre contiene funciones de agregacion, es permitido escribir clausulas HAVING que no contengan agrupacion, pero rara vez es util, la misma condicion podria ser usada mas eficientemente en la clausula WHERE

Ejemplos:

SELECT ciudad FROM tiempo WHERE baja_temp = max(baja_temp);

El ejemplo mostrado anteriormente es una mala formulacion de una clausula WHERE porque contiene una funcion de agregacion y esto no es permitido. La reformulacion de esta clausula seria la siguiente:

SELECT ciudad FROM tiempo WHERE baja_temp = (SELECT max(baja_temp) FROM tiempo);

La consulta de arriba nos trae como resultado la ciudad con la mayor temperatura baja registrada.

SELECT ciudad, max(baja_temp) FROM tiempo GROUP BY ciudad;

La consulta anterior da como resultado la maxima temperatura baja por ciudad.

SELECT ciudad, max(baja_temp) FROM tiempo GROUP BY ciudad HAVING max(baja_temp) < 40;

La consulta anterior da como resultado la maxima temperatura por ciudad siempre y cuando el valor de la maxima temperatura baja sea menor a 40

SELECT ciudad, max(baja_temp) FROM tiempo WHERE ciudad LIKE ‘S%’ GROUP BY ciudad HAVING max(baja_temp) < 40;

La consulta anterior da como resultado la maxima temperatura por ciudad siempre y cuando el valor de la maxima temperatura baja sea menor a 40 y el nombre de la ciudad empieze por la letra S.

Nota: La informacion de este post es tomada de la documentacion oficial de PostgreSQL.

3 comentarios »

  1. […] rara vez es util, la misma condicion podria ser usada mas eficientemente en la clausula WHEREMas: https://elblogdeover.wordpress.com/2007/12/25/diferencia-entre-la-clausula-where-y-having-en-sql/ […]

    Pingback por DbRunas - TIP: Diferencia entre la clausula WHERE y HAVING en SQL — diciembre 25, 2007 @ 11:49 pm

  2. You helped me, much thanks! 🙂

    Comentarios por sky — enero 19, 2011 @ 4:10 pm

  3. […] diferencias entre having y where […]

    Pingback por diferencias entre having y where « BLOG INFORMATICA — May 24, 2012 @ 11:25 am


RSS feed for comments on this post. TrackBack URI

Deja un comentario

Crea un blog o un sitio web gratuitos con WordPress.com.