集計正規関数 (Entity SQL)
集計とは、一連の入力値をまとまった値 (単一の値など) に変換する式を指します。集計は SELECT 式の GROUP BY 句と組み合わせて使用されるのが一般的であり、どこで使用できるかについては制約があります。
次の表に、集計 Entity SQL 正規関数を示します。
関数 | 説明 |
---|---|
Avg(expression) |
NULL 以外の値の平均を返します。 引数 Int32、Int64、Double、Decimal。 戻り値 expression の型。すべての入力値が null の場合は Null です。 例
|
BigCount(expression) |
NULL 値および重複値を含む集計のサイズを返します。 引数 任意の型。 戻り値 Int64。 例
|
Count(expression) |
NULL 値および重複値を含む集計のサイズを返します。 引数 任意の型。 戻り値 Int32。 例
|
Max(expression) |
NULL 以外の値の最大値を返します。 引数 Byte、Int16、Int32、Int64、Byte、Single、Double、Decimal、DateTime、DateTimeOffset、Time、String、Binary。 戻り値 expression の型。すべての入力値が null の場合は Null です。 例
|
Min(expression) |
NULL 以外の値の最小値を返します。 引数 Byte、Int16、Int32、Int64、Byte、Single、Double、Decimal、DateTime、DateTimeOffset、Time、String、Binary。 戻り値 expression の型。すべての入力値が null の場合は Null です。 例
|
StDev(expression) |
NULL 以外の値の標準偏差を返します。 引数 Int32、Int64、Double、Decimal。 戻り値 Double。すべての入力値が null の場合は Null です。 例
|
Sum(expression) |
NULL 以外の値の合計を返します。 引数 Int32、Int64、Double、Decimal。 戻り値 Double。すべての入力値が null の場合は Null です。 例
|
同等の機能は、Microsoft SQL クライアント マネージ プロバイダでも利用できます。詳細については、「Entity Framework 用 .NET Framework Data Provider for SQL Server (SqlClient) 関数」を参照してください。
コレクションベースの集計
コレクションベースの集計 (コレクション関数) は、コレクションに対して演算を実行して、値を返します。たとえば、ORDERS がすべての注文のコレクションである場合、次の式を使って、最も早い出荷日を計算できます。
min(select value o.ShipDate from LOB.Orders as o)
コレクションベースの集計では、現在の周囲の名前解決スコープ内で式が評価されます。
グループベースの集計
グループベースの集計では、GROUP BY 句によって定義されたグループごとに計算が実行されます。その結果の各グループについて、それぞれのグループ内の要素を、集計計算の入力として使って別個の集計が計算されます。select 式で group by 句を使用した場合、投影または order by 句で使用できるのは、グループ化式の名前、集計式、または定数式だけです。
次の例では、製品ごとの平均発注数量を計算しています。
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
SELECT 式に明示的な group by 句を指定せずに、グループベースの集計を行うこともできます。この場合、すべての要素が単一のグループとして扱われます。これは、定数に基づくグループ化を指定した場合と同等です。たとえば、次のような式があったとします。
select avg(ol.Quantity) from LOB.OrderLines as ol
これは、次の指定と同じです。
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
グループベースの集計内の式は、WHERE 句式から可視である名前解決スコープ内で評価されます。
Transact-SQL の場合と同様、グループベースの集計には、ALL または DISTINCT の修飾子を指定することもできます。DISTINCT 修飾子が指定された場合、集計を計算する前に、集計の入力コレクションから重複が除外されます。ALL 修飾子が指定された場合 (または修飾子が指定されなかった場合)、重複は除外されません。
コレクションベースの集計とグループベースの集計
Entity SQL で集計を指定する場合は、コレクションベースの集計を使用することをお勧めします。ただし、SQL Server のユーザーが Entity SQL を習得しやすいようにグループベースの集計もサポートされています。
同様に、集計の入力に対する修飾子として DISTINCT (または ALL) を指定できますが、これは、SQL と同様の動作を実装するためであり、set() 演算子の使用が推奨されます。