Compartilhar via


Operador de plano de execução Stream Aggregate

O operador Stream Aggregate agrupa linhas através de uma ou mais colunas e em seguida calcula uma ou mais expressões de agregação retornadas pela consulta. A saída deste operador pode ser referenciada por operadores posteriores na consulta, retornada ao cliente, ou ambos. O operador Stream Aggregate requer a entrada de dados ordenada pelas colunas dentro de seus grupos. O otimizador usará um operador Sort antes deste operador se os dados ainda não estiverem classificados em função de um operador Sort anterior ou devido a uma busca ou varredura de índice ordenado. Na instrução SHOWPLAN_ALL ou no plano de execução gráfica no SQL Server Management Studio, são listadas as colunas no predicado GROUP BY na coluna Argumento, e as expressões de agregação são listadas na coluna Valores Definidos.

O operador Stream Aggregate é um operador físico.

Ícone do operador Stream aggregateÍcone do plano de execução gráfica

Exemplos

O exemplo a seguir seleciona dados da tabela SalesPerson e agrega os valores para as colunas Bonus e SalesYTD por território. A saída do plano de execução mostra que o otimizador de consulta usa o operador Stream Aggregate para agrupar as linhas na tabela SalesPerson pela coluna TerritoryID e, em seguida, calcula os valores para as colunas AVG(Bonus) e SUM(SalesYTD) com base nesse agrupamento.

USE AdventureWorks2008R2;
GO
SET NOCOUNT ON;
GO
SET SHOWPLAN_ALL ON;
GO
SELECT TerritoryID, 
    AVG(Bonus) AS 'Average bonus', 
    SUM(SalesYTD) AS'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
SET SHOWPLAN_ALL OFF;

A saída do plano de execução do operador Stream Aggregate é exibida abaixo.

StmtText

------------------------------------------------------------------------------------------------

|--Stream Aggregate(GROUP BY:([AdventureWorks2008R2].[Sales].[SalesPerson].[TerritoryID]) )

DEFINE:([Expr1011]=Count(*),

[Expr1012]= SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[Bonus]),

[Expr1004]=SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[SalesYTD])))

Argument

-----------------------------------------------------------------------------------------------

GROUP BY:([AdventureWorks2008R2].[Sales].[SalesPerson].[TerritoryID]

DefinedValues

----------------------------------------------------------------------------------------------

[Expr1011]=Count(*),

[Expr1012]=SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[Bonus]),

[Expr1004]=SUM([AdventureWorks2008R2].[Sales].[SalesPerson].[SalesYTD])