Freigeben über


GROUP BY (Entity SQL)

Gibt Gruppen an, in die von einem Abfrageausdruck (SELECT) zurückgegebene Objekte platziert werden sollen.

Syntax

[ GROUP BY aliasedExpression [ ,...n ] ]

Argumente

aliasedExpression Ein beliebiger gültiger Abfrageausdruck, für den die Gruppierung ausgeführt wird. expression kann eine Eigenschaft oder ein nicht aggregierter Ausdruck sein, der auf eine eigenschaft verweist, die von der FROM-Klausel zurückgegeben wird. Jeder Ausdruck in einer GROUP BY-Klausel muss einen Typ auswerten, der für die Gleichheit verglichen werden kann. Diese Typen sind im Allgemeinen skalare Grundtypen wie Zahlen, Zeichenfolgen und Datumsangaben. Sie können nicht nach einer Sammlung gruppieren.

Bemerkungen

Wenn Aggregatfunktionen in der SELECT-Klauselauswahlliste <>enthalten sind, berechnet GROUP BY einen Zusammenfassungswert für jede Gruppe. Wenn GROUP BY angegeben wird, muss jeder Eigenschaftsname in einem nicht aggregierten Ausdruck in der Auswahlliste in der GROUP BY-Liste enthalten sein, oder der GROUP BY-Ausdruck muss exakt mit dem Auswahllistenausdruck übereinstimmen.

Hinweis

Wenn die ORDER BY-Klausel nicht angegeben ist, sind gruppen, die von der GROUP BY-Klausel zurückgegeben werden, nicht in einer bestimmten Reihenfolge. Um eine bestimmte Reihenfolge der Daten anzugeben, empfehlen wir, die ORDER BY-Klausel immer zu verwenden.

Wenn eine GROUP BY-Klausel explizit oder implizit angegeben wird (z. B. durch eine HAVING-Klausel in der Abfrage), wird der aktuelle Bereich ausgeblendet, und ein neuer Bereich wird eingeführt.

Die SELECT-Klausel, die HAVING-Klausel und die ORDER BY-Klausel können nicht mehr auf elementnamen verweisen, die in der FROM-Klausel angegeben sind. Sie können nur auf die Gruppierungsausdrücke selbst verweisen. Dazu können Sie jedem Gruppierungsausdruck neue Namen (Aliase) zuweisen. Wenn kein Alias für einen Gruppierungsausdruck angegeben ist, versucht Entity SQL, eine mithilfe der Aliasgenerierungsregeln zu generieren, wie im folgenden Beispiel dargestellt.

SELECT g1, g2, ...gn FROM c as c1

GROUP BY e1 as g1, e2 as g2, ...en as gn

Ausdrücke in der GROUP BY-Klausel können nicht auf namen verweisen, die weiter oben in derselben GROUP BY-Klausel definiert wurden.

Zusätzlich zu Gruppierungsnamen können Sie auch Aggregate in der SELECT-Klausel, HAVING-Klausel und der ORDER BY-Klausel angeben. Ein Aggregat enthält einen Ausdruck, der für jedes Element der Gruppe ausgewertet wird. Der Aggregatoperator reduziert die Werte aller diese Ausdrücke (in der Regel jedoch nicht immer in einen einzelnen Wert). Der Aggregatausdruck kann Verweise auf die ursprünglichen Elementnamen erstellen, die im übergeordneten Bereich sichtbar sind, oder auf einen der neuen Namen, die von der GROUP BY-Klausel selbst eingeführt wurden. Obwohl die Aggregate in der SELECT-Klausel, HAVING-Klausel und ORDER BY-Klausel angezeigt werden, werden sie tatsächlich unter demselben Bereich wie die Gruppierungsausdrücke ausgewertet, wie im folgenden Beispiel dargestellt.

SELECT name, sum(o.Price * o.Quantity) as total

FROM orderLines as o

GROUP BY o.Product as name

Diese Abfrage verwendet die GROUP BY-Klausel, um einen Bericht über die Kosten aller bestellten Produkte zu erstellen, aufgeschlüsselt nach Produkt. Der Name name wird dem Produkt als Teil des Gruppierungsausdrucks zugewiesen und dann in der SELECT-Liste auf diesen Namen verwiesen. Außerdem wird das Aggregat sum in der SELECT-Liste angegeben, das intern auf den Preis und die Menge der Auftragszeile verweist.

Jeder GROUP By-Schlüsselausdruck muss mindestens einen Verweis auf den Eingabebereich haben:

SELECT FROM Persons as P
GROUP BY Q + P   -- GOOD
GROUP BY Q   -- BAD
GROUP BY 1   -- BAD, a constant is not allowed

Ein Beispiel für die Verwendung von GROUP BY finden Sie unter HAVING.

Beispiel

Die folgende Entity SQL-Abfrage verwendet den GROUP BY-Operator, um Gruppen anzugeben, in die Objekte von einer Abfrage zurückgegeben werden. Die Abfrage basiert auf dem AdventureWorks Sales Model. Führen Sie die folgenden Schritte aus, um diese Abfrage zu kompilieren und auszuführen:

  1. Gehen Sie wie folgt vor : Ausführen einer Abfrage, die PrimitiveType-Ergebnisse zurückgibt.

  2. Übergeben Sie die folgende Abfrage als Argument an die ExecutePrimitiveTypeQuery Methode:

SELECT VALUE name FROM AdventureWorksEntities.Products 
    AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price

Siehe auch