Freigeben über


Aggregieren von kanonischen Funktionen (Entity SQL)

Aggregate sind Ausdrücke, die eine Folge von Eingabewerten beispielsweise auf einen einzigen Wert reduzieren. Aggregate werden normalerweise zusammen mit der GROUP BY-Klausel des SELECT-Ausdrucks verwendet, und für ihre Verwendung gelten Einschränkungen.

In der folgenden Tabelle sind die kanonischen Entity SQL-Aggregatfunktionen aufgeführt.

Funktion Beschreibung

Avg(expression)

Gibt den Durchschnitt der von NULL verschiedenen Werte zurück.

Argumente

Ein Int32, Int64, Double und Decimal.

Rückgabewert

Der Typ des expression. Null, wenn alle Eingabewerte null-Werte sind.

Beispiel

SELECT VALUE AVG(p.ListPrice) FROM AdventureWorksEntities.Product as p

BigCount(expression)

Gibt die Größe des Aggregats, einschließlich NULL- und doppelter Werte zurück.

Argumente

Beliebiger Typ.

Rückgabewert

Ein Int64.

Beispiel

SELECT VALUE BigCount(p.ProductID) FROM AdventureWorksEntities.Product as p

Count(expression)

Gibt die Größe des Aggregats, einschließlich NULL- und doppelter Werte zurück.

Argumente

Beliebiger Typ.

Rückgabewert

Ein Int32.

Beispiel

SELECT VALUE Count(p.ProductID) FROM AdventureWorksEntities.Product as p

Max(expression)

Gibt den Höchstwert der von NULL verschiedenen Werte zurück.

Argumente

EinByte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.

Rückgabewert

Der Typ des expression. Null, wenn alle Eingabewerte null-Werte sind.

Beispiel

SELECT VALUE Max(p.ListPrice) FROM AdventureWorksEntities.Product as p

Min(expression)

Gibt den geringsten Wert der von NULL verschiedenen Werte zurück.

Argumente

Ein Byte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String und Binary

Rückgabewert

Der Typ des expression. Null, wenn alle Eingabewerte null-Werte sind.

Beispiel

SELECT VALUE Min(p.ListPrice) FROM AdventureWorksEntities.Product as p

StDev(expression)

Gibt die Standardabweichung der von NULL verschiedenen Werte zurück.

Argumente

Ein Int32, Int64, Double, Decimal.

Rückgabewert

Ein Double. Null, wenn alle Eingabewerte null-Werte sind.

Beispiel

SELECT VALUE StDev(product.ListPrice)

FROM AdventureWorksEntities.Product AS product

where product.ListPrice > 2.0M

Sum(expression)

Gibt die Summe der von NULL verschiedenen Werte zurück.

Argumente

Ein Int32, Int64, Double, Decimal.

Rückgabewert

Ein Double. Null, wenn alle Eingabewerte null-Werte sind.

Beispiel

SELECT VALUE Sum(p.ListPrice) FROM AdventureWorksEntities.Product as p

Entsprechende Funktionalität ist für den verwalteten Anbieter des Microsoft SQL-Clients verfügbar. Weitere Informationen finden Sie unter .NET Framework-Datenanbieter für SQL Server (SqlClient) für die Entity Framework-Funktionen.

Auflistungsbasierte Aggregate

Auflistungsbasierte Aggregate (Auflistungsfunktionen) verarbeiten Auflistungen und geben einen Wert zurück. Wenn beispielsweise ORDERS eine Auflistung aller Bestellungen ist, können Sie das früheste Lieferdatum mit dem folgenden Ausdruck berechnen:

min(select value o.ShipDate from LOB.Orders as o)

Ausdrücke in auflistungsbasierten Aggregaten werden innerhalb des aktuellen umgebenden Namensauflösungsbereichs ausgewertet.

Gruppenbasierte Aggregate

Gruppenbasierte Aggregate werden für eine Gruppe berechnet, die mit einer GROUP BY-Klausel definiert wurde. Für jede Gruppe im Ergebnis wird ein separates Aggregat berechnet, indem die Elemente in jeder Gruppe als Eingabe zur Aggregatberechnung verwendet werden. Wenn eine GROUP BY-Klausel in einem SELECT-Ausdruck verwendet wird, können sich in der Projektion oder ORDER BY-Klausel nur die Namen von Gruppierungsausdrücken, Aggregate oder konstante Ausdrücke befinden.

Im folgenden Beispiel wird die durchschnittlich bestellte Anzahl für jedes Produkt berechnet:

select p, avg(ol.Quantity) from LOB.OrderLines as ol
  group by ol.Product as p

Gruppenbasierte Aggregate können im SELECT-Ausdruck ohne explizite GROUP BY-Klausel vorkommen. In diesem Fall werden alle Elemente als eine einzelne Gruppe behandelt. Dies entspricht dem Fall, dass eine Gruppierung auf der Grundlage einer Konstante angegeben wird. Betrachten Sie beispielsweise folgenden Ausdruck:

select avg(ol.Quantity) from LOB.OrderLines as ol

Dieser Ausdruck ist äquivalent zu Folgendem:

select avg(ol.Quantity) from LOB.OrderLines as ol group by 1

Ausdrücke in gruppenbasierten Aggregaten werden innerhalb des Namensauflösungsbereichs ausgewertet, der für den WHERE-Klauselausdruck sichtbar wäre.

Gruppenbasierte Aggregate können wie in Transact-SQL auch einen ALL-Modifizierer oder einen DISTINCT-Modifizierer angeben. Wenn der DISTINCT-Modifizierer angegeben ist, werden Duplikate vor der Berechnung des Aggregats aus der Aggregateingabeauflistung gelöscht. Wenn der ALL-Modifizierer oder kein Modifizierer angegeben ist, werden Duplikate nicht gelöscht.

Vergleich von auflistungsbasierten mit gruppenbasierten Aggregaten

Auflistungsbasierte Aggregate sind in Entity SQL der bevorzugte Modus zum Angeben von Aggregaten. Gruppenbasierte Aggregate werden jedoch ebenfalls unterstützt, um SQL Server-Benutzern die Verwendung von Entity SQL zu erleichtern.

Aus dem gleichen Grund wird das Angeben der DISTINCT- und ALL-Modifizierer für die Aggregateingabe wie in SQL unterstützt. Die Verwendung des set()-Operators ist jedoch zu bevorzugen.

Siehe auch

Konzepte

Kanonische Funktionen (Entity SQL)