集計は、グループ操作の一部としてコレクションをスカラーに凝縮する言語コンストラクトです。 Entity SQL 集計は、次の 2 つの形式で提供されます。
式の任意の場所で使用できる Entity SQL コレクション関数。 これには、コレクションに対して動作するプロジェクションと述語での集計関数の使用が含まれます。 コレクション関数は、Entity SQL で集計を指定する場合に推奨されるモードです。
GROUP BY 句を持つクエリ式のグループ集計。 Transact-SQL と同様に、グループ集計では、集計入力の修飾子として DISTINCT と ALL を受け取ります。
Entity SQL はまず、式をコレクション関数として解釈しようとします。式が SELECT 式のコンテキストにある場合、式はグループ集計として解釈されます。
Entity SQL では、 GROUPPARTITION と呼ばれる特別な集計演算子を定義します。 この演算子を使用すると、グループ化された入力セットへの参照を取得できます。 これにより、より高度なグループ化クエリが可能になります。GROUP BY 句の結果は、グループ集計関数またはコレクション関数以外の場所で使用できます。
コレクション関数
コレクション関数はコレクションに対して動作し、スカラー値を返します。 たとえば、 orders がすべての ordersのコレクションである場合は、次の式を使用して最も早い出荷日を計算できます。
min(select value o.ShipDate from LOB.Orders as o)
グループ集計
グループ集計は、GROUP BY 句によって定義されたグループ結果に対して計算されます。 GROUP BY 句は、データをグループに分割します。 結果の各グループに対して集計関数が適用され、集計計算の入力として各グループの要素を使用して個別の集計が計算されます。 SELECT 式で GROUP BY 句を使用する場合、プロジェクション、HAVING、または ORDER BY 句には、グループ化式の名前、集計、または定数式のみが存在する可能性があります。
次の例では、各製品に対して注文された平均数量を計算します。
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
SELECT 式に明示的な GROUP BY 句を指定せずにグループ集計を作成できます。 すべての要素は 1 つのグループとして扱われます。これは、定数に基づいてグループ化を指定する場合と同じです。
select avg(ol.Quantity) from LOB.OrderLines as ol
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
GROUP BY 句で使用される式は、WHERE 句式に表示されるのと同じ名前解決スコープを使用して評価されます。