SQL Server – Usando Where y Having

Ya sé que para muchos esto es básico, pero yo personalmente tuve problemas viendo el valor de usar un HAVING en lugar de un WHERE y ahora que me queda más claro, pues creo que podría ser valioso para alguien allá afuera el conocer mi experiencia, así que ahí va.

WHERE es una condición utilizada con T-SQL, esta siempre aplica a la fila y HAVING es una clausula que siempre aplica a la fila sumarizada(debe ser usada con group by).

WHERE puede ser usada para agregar una condición en la sentencia SELECT o también puede ser usada con una funcion de una sola fila. En este caso deberias tener que especificar el WHERE antes de la clausula GROUP BY.

Por otro lado, la clausula HAVING es usada para agregar una condición sobre el GROUP BY y se supone debe ser usada despues de la clausula GROUP BY

Ademas, la clausula HAVING puede ser usada en la sentencia SELECT con la clausula GROUP BY e incluso cuando GROUP BY no esta presente, en estos casos HAVING funcionará como WHERE.

Ya en la práctica podemos hacer lo siguiente para entenderlo mejor, primero creamos la tabla y segundo le agregamos algunos datos dummy

CREATE TABLE BlogCount
(
BloggerName VARCHAR(10),
Topic VARCHAR(15),
[Year] INT,
Total INT
)

INSERT INTO BlogCount VALUES(‘Ritesh’,’SQL’,2005,10)
INSERT INTO BlogCount VALUES(‘Ritesh’,’SQL’,2006,17)
INSERT INTO BlogCount VALUES(‘Ritesh’,’SQL’,2007,124)
INSERT INTO BlogCount VALUES(‘Ritesh’,’SQL’,2008,124)
INSERT INTO BlogCount VALUES(‘Ritesh’,’.NET’,2008,24)
INSERT INTO BlogCount VALUES(‘Alka’,’SQL’,2007,14)
INSERT INTO BlogCount VALUES(‘Alka’,’.NET’,2007,18)
INSERT INTO BlogCount VALUES(‘Alka’,’SQL’,2008,14)

Ya que tenemos datos para trabajar, lo mejor será copiar y pegar la siguiente sentencia en tu vista de SQL Server Management Studio

SELECT * FROM blogcount WHERE Topic=’SQL’

obteniendo

BloggerName    Topic    Year    Total
Ritesh                      SQL        2005       10
Ritesh                     SQL        2006        17
Ritesh                     SQL        2007       124
Ritesh                     SQL        2008       124
Alka                        SQL        2007        14
Alka                        SQL        2008       14

SELECT BloggerName,AVG(total) AS ‘Average’ FROM blogcount WHERE Topic=’SQL’ GROUP BY BloggerName

Si toda la información fue creada correctamente, entonces obtendremos algo como lo que sigue, que es agrupar por el campo BloggerName y sacando el promedio de la columna Total cuando Topi = ‘SQL’

BloggerName    Average
Alka                         14
Ritesh                     68

SELECT BloggerName,AVG(total) AS ‘Average’ FROM blogcount WHERE Topic=’SQL’ GROUP BY BloggerName HAVING AVG(total)>25

Al agregarle el HAVING AVG(total)>25, estamos aplicando un nuevo filtro tras haber obtenido el conjunto anterior, logrando entonces tener lo siguiente

BloggerName    Average
Ritesh                      68

Espero les sirva para entender estas dos clausulas… tan parecidas y tan diferentes.

Fuente

One response to “SQL Server – Usando Where y Having

  1. Pingback: SQL Server – Usando Where y Having « DbRunas – Noticias y Recursos sobre Bases de Datos

Leave a comment