Subconsultas correlacionadas com operadores de comparação
Use uma subconsulta correlacionada com um operador de comparação para achar vendas em que a quantidade seja menor do que a quantidade média de vendas daquele produto.
USE AdventureWorks2008R2;
GO
SELECT ProductID, OrderQty
FROM Sales.SalesOrderDetail s1
WHERE s1.OrderQty <
(SELECT AVG (s2.OrderQty)
FROM Sales.SalesOrderDetail s2
WHERE s2.ProductID = s1.ProductID)
A consulta externa seleciona as linhas de SalesOrderDetail (ou seja, de s1) uma por uma. A subconsulta calcula a quantidade média para cada venda que é considerada para seleção na consulta externa. Para cada valor possível de s1, o SQL Server avalia a subconsulta e adiciona o registro considerado aos resultados se a quantidade for menor que a média calculada.
Às vezes, uma subconsulta correlacionada imita uma cláusula GROUP BY. Este exemplo localiza todos os produtos que têm um preço maior que a média para produtos de sua subcategoria:
USE AdventureWorks2008R2;
GO
SELECT p1.ProductSubcategoryID, p1.Name
FROM Production.Product p1
WHERE p1.ListPrice >
(SELECT AVG (p2.ListPrice)
FROM Production.Product p2
WHERE p1.ProductSubcategoryID = p2.ProductSubcategoryID)
Para cada valor possível de p1, o SQL Server avalia a subconsulta e inclui a linha nos resultados se o valor ListPrice daquela linha for superior ao da média calculada. Não é necessário agrupar explicitamente por tipo, porque as linhas – para as quais preço médio é calculado – são restringidas pela cláusula de WHERE na subconsulta.