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
|
BigCount(expression) |
Gibt die Größe des Aggregats, einschließlich NULL- und doppelter Werte zurück. Argumente Beliebiger Typ. Rückgabewert Ein Int64. Beispiel
|
Count(expression) |
Gibt die Größe des Aggregats, einschließlich NULL- und doppelter Werte zurück. Argumente Beliebiger Typ. Rückgabewert Ein Int32. Beispiel
|
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
|
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
|
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
|
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
|
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.