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 Sort operator antes deste operador se os dados ainda não estiverem classificados em função de um operador de Classificação 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 ValoresDefinidos.

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) baseado nesse agrupamento.

USE AdventureWorks;
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:([AdventureWorks].[Sales].[SalesPerson].[TerritoryID]) )
        DEFINE:([Expr1011]=Count(*), 
                [Expr1012]= SUM([AdventureWorks].[Sales].[SalesPerson].[Bonus]), 
                [Expr1004]=SUM([AdventureWorks].[Sales].[SalesPerson].[SalesYTD])))

Argument
-----------------------------------------------------------------------------------------------
GROUP BY:([AdventureWorks].[Sales].[SalesPerson].[TerritoryID]

DefinedValues
----------------------------------------------------------------------------------------------
[Expr1011]=Count(*), 
[Expr1012]=SUM([AdventureWorks].[Sales].[SalesPerson].[Bonus]),
[Expr1004]=SUM([AdventureWorks].[Sales].[SalesPerson].[SalesYTD])