GROUPPARTITION (Entity SQL)
引数値のコレクションを返します。この値は、集計が関連する現在のグループ パーティションから投影されたものです。 GroupPartition
集計は、グループベースの集計であり、コレクションベースの形式ではありません。
構文
GROUPPARTITION( [ALL|DISTINCT] expression )
引数
expression
Entity SQL 式。
Remarks
次のクエリでは、製品の一覧と、製品ごとの注文明細の数量のコレクションが生成されます。
SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol
GROUP BY ol.Product AS p
次の 2 つのクエリは、同じ意味を持っています。
SELECT p, Sum(GroupPartition(ol.Quantity)) FROM LOB.OrderLines AS ol
GROUP BY ol.Product AS p
SELECT p, Sum(ol.Quantity) FROM LOB.OrderLines AS ol
group by ol.Product as p
GROUPPARTITION
演算子は、ユーザー定義の集計関数と組み合わせて使用できます。
GROUPPARTITION
は、グループ化された入力セットへの参照を格納する特殊な集計演算子です。 この参照は、GROUP BY がスコープに含まれているクエリ内の任意の位置で使用できます。 次に例を示します。
SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
通常の GROUP BY
では、グループ化の結果は非表示です。 結果は集計関数でのみ使用できます。 グループ化の結果を表示するには、サブクエリを使用してグループ化の結果と、入力セットを相関させる必要があります。 次の 2 つのクエリは等価です。
SELECT p, (SELECT q FROM GroupPartition(ol.Quantity) AS q) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
SELECT p, (SELECT ol.Quantity AS q FROM LOB.OrderLines AS ol2 WHERE ol2.Product = p) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
例からわかるように、GROUPPARTITION 集計演算子を使用すると、グループ化後の入力セットへの参照を容易に取得できます。
expression
パラメーターを使用すると、GROUPPARTITION 演算子では、演算子入力内の任意の Entity SQL 式を指定できます。
たとえば、グループ パーティションへの次の入力式はすべて有効です。
SELECT groupkey, GroupPartition(b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(1) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(a + b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({a + b}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({42}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(b > a) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
例
次の例では、GROUPPARTITION 句を GROUP BY 句と共に使用する方法を示します。 GROUP BY 句は SalesOrderHeader
によって Contact
エンティティをグループ化します。 続いて GROUPPARTITION 句は、各グループの TotalDue
プロパティを投影し、その結果、10 進数のコレクションが生成されます。
USING Microsoft.Samples.Entity
Function MyAvg(dues Collection(Decimal)) AS
(
Avg(SELECT value due FROM dues AS due WHERE due > @price)
)
SELECT TOP(10) contactID, MyAvg(GroupPartition(order.TotalDue))
FROM AdventureWorksEntities.SalesOrderHeaders AS order
GROUP BY order.Contact.ContactID AS contactID;