次の方法で共有


集計正規関数 (Entity SQL)

集計とは、一連の入力値をまとまった値 (単一の値など) に変換する式を指します。集計は SELECT 式の GROUP BY 句と組み合わせて使用されるのが一般的であり、どこで使用できるかについては制約があります。

次の表に、集計 Entity SQL 正規関数を示します。

関数 説明

Avg(expression)

NULL 以外の値の平均を返します。

引数

Int32Int64DoubleDecimal

戻り値

expression の型。すべての入力値が null の場合は Null です。

SELECT VALUE AVG(p.ListPrice) FROM AdventureWorksEntities.Product as p

BigCount(expression)

NULL 値および重複値を含む集計のサイズを返します。

引数

任意の型。

戻り値

Int64

SELECT VALUE BigCount(p.ProductID) FROM AdventureWorksEntities.Product as p

Count(expression)

NULL 値および重複値を含む集計のサイズを返します。

引数

任意の型。

戻り値

Int32

SELECT VALUE Count(p.ProductID) FROM AdventureWorksEntities.Product as p

Max(expression)

NULL 以外の値の最大値を返します。

引数

ByteInt16Int32Int64ByteSingleDoubleDecimalDateTimeDateTimeOffsetTimeStringBinary

戻り値

expression の型。すべての入力値が null の場合は Null です。

SELECT VALUE Max(p.ListPrice) FROM AdventureWorksEntities.Product as p

Min(expression)

NULL 以外の値の最小値を返します。

引数

ByteInt16Int32Int64ByteSingleDoubleDecimalDateTimeDateTimeOffsetTimeStringBinary

戻り値

expression の型。すべての入力値が null の場合は Null です。

SELECT VALUE Min(p.ListPrice) FROM AdventureWorksEntities.Product as p

StDev(expression)

NULL 以外の値の標準偏差を返します。

引数

Int32Int64DoubleDecimal

戻り値

Double。すべての入力値が null の場合は Null です。

SELECT VALUE StDev(product.ListPrice)

FROM AdventureWorksEntities.Product AS product

where product.ListPrice > 2.0M

Sum(expression)

NULL 以外の値の合計を返します。

引数

Int32Int64DoubleDecimal

戻り値

Double。すべての入力値が null の場合は Null です。

SELECT VALUE Sum(p.ListPrice) FROM AdventureWorksEntities.Product as p

同等の機能は、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() 演算子の使用が推奨されます。

参照

概念

正規関数 (Entity SQL)