Compartilhar via


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.

Consulte também

Conceitos