Está en la página 1de 1

Utilizar cláusulas HAVING y WHERE en la misma consulta  

En algunas ocasiones, será conveniente excluir algunas filas de los grupos (utilizando
una cláusula WHERE) antes de aplicar una condición a los grupos como un todo
(utilizando una cláusula HAVING).

Una cláusula HAVING es como una cláusula WHERE, pero que solo se aplica a los
grupos en su totalidad (es decir, a las filas del conjunto de resultados que representa los
grupos), a diferencia de la cláusula WHERE, que se aplica a filas individuales. Una
consulta puede contener tanto una cláusula WHERE como una cláusula HAVING. En
tal caso:

 La cláusula WHERE se aplica primero a las filas individuales de las tablas u


objetos con valores de tabla del panel Diagrama. Solo se agrupan las filas que
cumplen las condiciones de la cláusula WHERE.
 La cláusula HAVING se aplica a continuación a las filas del conjunto de
resultados. Solo aparecen en el resultado de la consulta los grupos que cumplen
las condiciones HAVING. Solo puede aplicar una cláusula HAVING a las
columnas que también aparecen en la cláusula GROUP BY o en una función de
agregado.

SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10

 SUBCONSULTAS CON OPERADORES DE COMPARACIÓN

Las subconsultas se pueden presentar con uno de los operadores de comparación (=, <
>, >, > =, <, ! >, ! < o < =).

Una subconsulta precedida de un operador de comparación sin modificar (un operador


de comparación no seguido de  ANY  o  ALL ) debe devolver un valor individual en lugar
de una lista de valores, al igual que las subconsultas precedidas de  IN . Si una
subconsulta de este tipo devuelve más de un valor, SQL Server muestra un mensaje de
error.
USE AdventureWorks2016;
GO
SELECT CustomerID
FROM Sales.Customer
WHERE TerritoryID =
(SELECT TerritoryID
FROM Sales.SalesPerson

WHERE BusinessEntityID = 276);

También podría gustarte