彙總標準函式 (Entity SQL)

彙總 (Aggregate) 是指將一連串輸入值縮減成單一值的運算式。彙總通常會與 SELECT 運算式的 GROUP BY 子句搭配使用,而且它們的使用位置具有一些條件約束 (Constraint)。

下表所示為彙總 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 Client Managed Provider 中提供了對等的功能。如需詳細資訊,請參閱 適用於 Entity Framework 的 .NET Framework Data Provider for SQL Server (SqlClient) 函式

以集合為基礎的彙總

以集合為基礎的彙總 (集合函式) 會針對集合運作並傳回一個值。例如,如果 ORDERS 是所有訂單的集合,您就可以使用下列運算式來計算最早出貨日期:

min(select value o.ShipDate from LOB.Orders as o)

以集合為基礎之彙總內部的運算式是在目前的環境名稱解析範圍內評估。

以群組為基礎的彙總

以群組為基礎的彙總會計算 GROUP BY 子句所定義的整個群組。系統會針對結果中的每個群組,使用每個群組中的項目當做彙總計算的輸入來計算個別的彙總。當 group-by 子句用於 select 運算式時,只有群組運算式名稱、彙總或常數運算式可以出現在投影或 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 修飾詞 (Modifier)。如果有指定 DISTINCT 修飾詞,系統就會在計算彙總之前,從彙總輸入集合中刪除重複項目。如果指定的是 ALL 修飾詞 (或沒有指定任何修飾詞),就不會執行重複項目刪除作業。

以集合為基礎的彙總與以群組為基礎的彙總

以集合為基礎的彙總是在 Entity SQL 中指定彙總的慣用模式。不過,系統也支援以群組為基礎的彙總,讓 SQL Server 使用者能更方便學習如何使用 Entity SQL 。

同樣地,指定 DISTINCT (或 ALL) 做為彙總輸入的修飾詞可支援近似 SQL 的行為,但是慣用的機制是改用 set() 運算子。

另請參閱

概念

標準函式 (Entity SQL)