Blog
La cláusula o declaración de SQL HAVING forma parte esencial del agrupamiento por consulta, esta es casi idéntica a WHERE, pero funciona en campos agregados después de la fase de agregación, por el contrario WHERE filtra los datos antes de agregarlos.
Para dar un ejemplo, una declaración WHERE en un GROUP BY solamente agrupará los campos que coincidan con su criterio.
CREATE TABLE notas (nombre TEXT, clase INTEGER, nota INTEGER); INSERT INTO notas (nombre, clase, nota) VALUES ("Camilo", 1, 97), ("David", 1, 88), ("Juana", 1, 98), ("Juliana", 1, 82), ("Laura", 1, NULL), ("Freddy", 2, 93), ("Julian", 2, 82), ("Rafael", 2, 87), ("Andrea", 2, 99), ("Simon", 2, 79); SELECT clase, AVG(nota) FROM notas WHERE nota > 85 GROUP BY clase;
Una declaración con HAVING filtrará los datos agrupados resultantes después de la agregación.
CREATE TABLE notas (nombre TEXT, clase INTEGER, nota INTEGER); INSERT INTO notas (nombre, clase, nota) VALUES ("Camilo", 1, 97), ("David", 1, 88), ("Juana", 1, 98), ("Juliana", 1, 82), ("Laura", 1, NULL), ("Freddy", 2, 93), ("Julian", 2, 82), ("Rafael", 2, 87), ("Andrea", 2, 99), ("Simon", 2, 79); SELECT clase, AVG(nota) FROM notas GROUP BY clase HAVING AVG(nota) > 90;
Observe que en esta consulta específica, la consulta filtrada WHERE no cambió el número de clases agregadas (ya que el filtro mantuvo al menos un estudiante de cada clase), pero la consulta filtrada HAVING sí eliminó una de las clases que no superó la puntuación media.
Claro que se puede combinar WHERE y HAVING para obtener el resultado que quieras.
Ejercicio:
Usaremos esta TABLA para el siguiente ejercicio:
CREATE TABLE notas (nombre TEXT, clase INTEGER, nota INTEGER); INSERT INTO notas (nombre, clase, nota) VALUES ("Camilo", 3, 97), ("David", 1, 88), ("Juana", 3, 98), ("Juliana", 1, 82), ("Laura", 1, NULL), ("Freddy", 2, 93), ("Julian", 2, 82), ("Rafael", 2, 87), ("Andrea", 2, 99), ("Simon", 2, 79);
Encuentra la nota máxima de todas las clases que tienen por lo menos 2 estudiantes.
Una vez conocido la cláusula SQL HAVING te invitamos a entra a nuestro curso de SQL: