Stream Aggregate (Showplanoperator)

Der Stream Aggregate-Operator gruppiert Zeilen nach einer oder mehreren Spalten und berechnet einen oder mehrere Aggregatausdrücke, die von der Abfrage zurückgegeben wurden. Auf die Ausgabe dieses Operators kann durch spätere Operatoren in der Abfrage verwiesen werden, die Ausgabe kann an den Client zurückgegeben werden oder beides. Für den Stream Aggregate-Operator ist es erforderlich, dass die Eingabe innerhalb der Gruppen nach den Spalten sortiert ist. Der Optimierer verwendet vor diesem Operator einen Sort-Operator, wenn die Daten nicht bereits durch einen vorherigen Sort-Operator oder durch einen geordneten Indexsuch- oder Scanvorgang sortiert wurde. In der SHOWPLAN_ALL-Anweisung oder im grafischen Ausführungsplan in SQL Server Management Studio sind die Spalten im GROUP BY-Prädikat in der Spalte Argument aufgelistet, und die Aggregatausdrücke sind in der Spalte DefinierteWerte aufgelistet.

Stream Aggregate ist ein physischer Operator.

Stream Aggregate-Operator (Symbol)Symbol im grafischen Ausführungsplan

Beispiele

Im folgenden Beispiel werden Daten aus der SalesPerson-Tabelle ausgewählt und die Werte für die Spalten Bonus und SalesYTD nach Territorium aggregiert. Die Ausgabe des Ausführungsplans zeigt, dass der Abfrageoptimierer den Stream Aggregate-Operator verwendet, um die Zeilen in der SalesPerson-Tabelle nach der TerritoryID-Spalte zu gruppieren und anschließend die Werte für die Spalten AVG(Bonus) und SUM(SalesYTD) für diese Gruppierung zu berechnen.

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;

Die Ausführungsplanausgabe des Stream Aggregate-Operators ist unten dargestellt.

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])