Ten en cuenta que en las ciencias informáticas un error casi siempre tiene diferentes soluciones, de igual modo nosotros compartiremos lo más óptimo y eficiente.
Solución:
HAVING: se utiliza para comprobar las condiciones después se produce la agregación.
DONDE: se utiliza para comprobar las condiciones antes de se produce la agregación.
Este código:
select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City
Le da una tabla de todas las ciudades en MA y el número de direcciones en cada ciudad.
Este código:
select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City
Having Count(1)>5
Le da una tabla de ciudades en MA con más de 5 direcciones y el número de direcciones en cada ciudad.
HAVING especifica una condición de búsqueda para un grupo o una función agregada utilizada en la instrucción SELECT.
Fuente
Diferencia número uno para mí: si HAVING
fuera eliminado del lenguaje SQL, entonces la vida continuaría más o menos como antes. Ciertamente, las consultas minoritarias tendrían que reescribirse utilizando una tabla derivada, CTE, etc., pero como resultado, podría decirse que serían más fáciles de entender y mantener. Tal vez sería necesario reescribir el código optimizador de los proveedores para dar cuenta de esto, nuevamente una oportunidad de mejora dentro de la industria.
Ahora considere por un momento eliminar WHERE
del idioma Esta vez el mayoria de las consultas existentes tendría que reescribirse sin una construcción alternativa obvia. Los codificadores tendrían que ser creativos, por ejemplo, unirse internamente a una tabla que se sabe que contiene exactamente una fila (por ejemplo, DUAL
en Oracle) usando el ON
cláusula para simular la previa WHERE
cláusula. Tales construcciones serían artificiales; sería obvio que faltaba algo en el idioma y, como resultado, la situación empeoraría.
TL;DR podríamos perder HAVING
mañana y las cosas no serían peores, posiblemente mejores, pero no se puede decir lo mismo de WHERE
.
De las respuestas aquí, parece que mucha gente no se da cuenta de que un HAVING
La cláusula puede usarse sin una GROUP BY
cláusula. En este caso, el HAVING
La cláusula se aplica a toda la expresión de la tabla y requiere que solo aparezcan constantes en la SELECT
cláusula. Típicamente el HAVING
cláusula implicará agregados.
Esto es más útil de lo que parece. Por ejemplo, considere esta consulta para probar si el name
columna es única para todos los valores en T
:
SELECT 1 AS result
FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );
Sólo hay dos resultados posibles: si el HAVING
la cláusula es true entonces el resultado será una sola fila que contiene el valor 1
de lo contrario el resultado será el conjunto vacío.
Aquí puedes ver las comentarios y valoraciones de los lectores
Te invitamos a respaldar nuestro cometido fijando un comentario y dejando una valoración te damos las gracias.