彙總標準函式 (Entity SQL)
彙總 (Aggregate) 是指將一連串輸入值縮減成單一值的運算式。彙總通常會與 SELECT 運算式的 GROUP BY 子句搭配使用,而且它們的使用位置具有一些條件約束 (Constraint)。
下表所示為彙總 實體 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 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 修飾詞 (或沒有指定任何修飾詞),就不會執行重複項目刪除作業。
以集合為基礎的彙總與以群組為基礎的彙總
以集合為基礎的彙總是在 實體 SQL 中指定彙總的慣用模式。不過,系統也支援以群組為基礎的彙總,讓 SQL Server 使用者能更方便學習如何使用 實體 SQL。
同樣地,指定 DISTINCT (或 ALL) 做為彙總輸入的修飾詞可支援近似 SQL 的行為,但是慣用的機制是改用 set() 運算子。