【SqlServer系列】聚合函數


1   概述

 本篇文章簡要回顧SQL Server  聚合函數,MAX,MIN,SUM,AVG,SUM,CHECKSUM_EGG,COUNT,STDEV,STDEVP,VAR,VARP。

2   具體內容

2.1  AVG (Transact-SQL)

返回組中值的平均值。空值被忽略。

2.1.1 定義

1 AVG ( [ ALL | DISTINCT ] expression ) 2    OVER ( [ partition_by_clause ] order_by_clause )   

2.1.2 參數

ALL 
將聚合函數應用於所有值。ALL是默認值。

DISTINCT 
指定僅對值的每個唯一實例執行AVG,而不管該值發生多少次。

表達式
是位數據類型除外的精確數字或近似數值數據類型類別的表達式。不允許使用聚合函數和子查詢。

OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause將FROM子句生成的結果集划分為應用該函數的分區。如果未指定,則該函數將查詢結果集的所有行視為單個組。order_by_clause確定執行操作的邏輯順序。order_by_clause是必需的。

2.1.3  返回類型

返回類型由表達式的評估結果的類型決定。

2.1.4 小結

a.If the data type of expression is an alias data type, the return type is also of the alias data type. However, if the base data type of the alias data type is promoted, for example from tinyint to int, the return value is of the promoted data type and not the alias data type.

譯文:如果表達式的數據類型是別名數據類型,則返回類型也是別名數據類型。但是,如果別名數據類型的基本數據類型被提升,例如從tinyint到int,則返回值是升級數據類型,而不是別名數據類型。

b.AVG () computes the average of a set of values by dividing the sum of those values by the count of nonnull values. If the sum exceeds the maximum value for the data type of the return value an error will be returned.

譯文:AVG()通過將這些值的總和除以非空值的計數來計算一組值的平均值。如果sum超過返回值的數據類型的最大值,則返回錯誤。

c.AVG is a deterministic function when used without the OVER and ORDER BY clauses. It is nondeterministic when specified with the OVER and ORDER BY clauses. For more information, see Deterministic and Nondeterministic Functions.

譯文:當沒有OVER和ORDER BY子句時,AVG是一個確定性函數。當用OVER和ORDER BY子句指定時,它是非確定性的。有關更多信息,請參閱確定性和非確定性函數

2.2  CHECKSUM_EGG

返回組中值的校驗和。空值被忽略。可以跟隨OVER子句

2.2.1 定義

1 CHECKSUM_AGG ( [ ALL | DISTINCT ] expression )

參數

ALL
將聚合函數應用於所有值。ALL是默認值。

DISTINCT 
指定CHECKSUM_AGG返回唯一值的校驗和。

expression
是一個整數表達式。不允許使用聚合函數和子查詢。

返回類型

將所有表達式值的校驗和返回為int。

2.2.2 小結

a.CHECKSUM_AGG可用於檢測表中的更改。

b.表中行的順序不影響CHECKSUM_AGG的結果。此外,CHECKSUM_AGG函數可以與DISTINCT關鍵字和GROUP BY子句一起使用。

b.如果表達式列表中的其中一個值更改,則列表的校驗和也通常會更改。但是,校驗和幾乎不會改變。

d.CHECKSUM_AGG具有與其他聚合函數類似的功能。有關更多信息,請參閱聚合函數(Transact-SQL)

2.2.3  例子

 

2.3  COUNT

返回組中的項目數。COUNT的作用類似於COUNT_BIG的功能。兩個函數之間的唯一區別是它們的返回值。COUNT始終返回一個int數據類型值。COUNT_BIG總是返回一個bigint數據類型的值。

2.3.1  定義

1 -- Syntax for SQL Server and Azure SQL Database 
2 
3 COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) 4     [ OVER ( 5  [ partition_by_clause ]   
6         [ order_by_clause ]   
7         [ ROW_or_RANGE_clause ]  
8     ) ]

參數

ALL
將聚合函數應用於所有值。ALL是默認值。

DISTINCT 
指定COUNT返回唯一非空值的數量。

expression
是除text,image或ntext之外的任何類型的表達式。不允許使用聚合函數和子查詢。


指定應計算所有行以返回表中的總行數。COUNT(*)不帶參數,不能與DISTINCT一起使用。COUNT(*)不需要表達式參數,因為根據定義,它不使用有關任何特定列的信息。COUNT(*)返回指定表中的行數,而不會擺脫重復。它分別計算每一行。這包括包含空值的行。

OVER ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
partition_by_clause將FROM子句生成的結果集划分為應用該函數的分區。如果未指定,則該函數將查詢結果集的所有行視為單個組。order_by_clause確定執行操作的邏輯順序。有關更多信息,請參閱OVER子句(Transact-SQL)

返回類型

INT

2.3.2 小結

COUNT(*)返回組中的項目數。這包括NULL值和重復。

COUNT(ALL 表達式)計算組中每一行的表達式,並返回非空值的數量。

COUNT(DISTINCT 表達式)計算組中每一行的表達式,並返回唯一的非空值。

對於大於2 ^ 31-1的返回值,COUNT會產生錯誤。改用COUNT_BIG。

在沒有OVER和ORDER BY子句的情況下使用COUNT是一個確定性函數。當用OVER和ORDER BY子句指定時,它是非確定性的。有關更多信息,請參閱確定性和非確定性函數

2.4  COUNT_BIGG

返回組中的項目數。COUNT_BIG的作用類似於COUNT功能。兩個函數之間的唯一區別是它們的返回值。COUNT_BIG總是返回一個bigint數據類型的值。COUNT始終返回一個int數據類型值。

2.5  GROUPING

指示GROUP BY列表中指定的列表達式是否聚合。GROUPING返回1為聚合,0為未聚合的結果集。在指定GROUP BY時,GROUPING只能在SELECT <select>列表,HAVING和ORDER BY子句中使用。

2.5.1 定義

1 GROUPING ( <column_expression> )

參數

<column_expression> 
是包含GROUP BY子句中的列的列或表達式。

返回類型

TINYINT

2.5.2  小結

GROUPING用於區分ROLLUP,CUBE或GROUPING SETS從標准空值返回的空值。作為ROLLUP,CUBE或GROUPING SETS操作的結果返回的NULL是NULL的特殊用途。這作為結果集中的列占位符,意味着全部。

2.6  GROUPING_ID

是計算分組級別的函數。當指定GROUP BY時,GROUPING_ID只能在SELECT <select>列表,HAVING或ORDER BY子句中使用。

2.6.1 定義

GROUPING_ID ( <column_expression>[ ,...n ] )

參數

<column_expression> 
是一個column_expression在GROUP BY子句。

返回類型

INT 

2.6.2 小結

GROUPING_ID <column_expression>必須與GROUP BY列表中的表達式完全匹配。例如,如果您按DATEPART(yyyy,< column name >)進行分組,請使用GROUPING_ID(DATEPART(yyyy,< column name >)); 或者如果您使用< column name > 進行分組,請使用GROUPING_ID(< column name >)。

2.7  MAX

2.7.1 定義

1 -- Syntax for SQL Server and Azure SQL Database 
2 
3 MAX ( [ ALL | DISTINCT ] expression ) 4    OVER ( [ partition_by_clause ] order_by_clause )

參數

ALL
將聚合函數應用於所有值。ALL是默認值。

DISTINCT 
指定每個唯一值被考慮。DISTINCT對MAX無效,僅適用於ISO兼容性。

表達式
是常量,列名稱或函數,以及算術,按位和字符串運算符的任意組合。MAX可以與數字,字符,唯一標識符和datetime列一起使用,但不能與位列一起使用。不允許使用聚合函數和子查詢。

有關更多信息,請參閱表達式(Transact-SQL)

OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause將FROM子句生成的結果集划分為應用該函數的分區。如果未指定,則該函數將查詢結果集的所有行視為單個組。order_by_clause確定執行操作的邏輯順序。order_by_clause是必需的。有關更多信息,請參閱OVER子句(Transact-SQL)

返回類型

返回與表達式相同的值。

2.7.2 小結

MAX忽略任何空值。

對於字符列,MAX找到整理順序中的最高值。

使用時,MAX不是OVER和ORDER BY子句的確定性函數。當用OVER和ORDER BY子句指定時,它是非確定性的。有關更多信息,請參閱確定性和非確定性函數

2.8  MIN

返回表達式中的最小值。可能之后是OVER子句

2.8.1定義:

1 -- Syntax for SQL Server and Azure SQL Database 
2 
3 MIN ( [ ALL | DISTINCT ] expression ) 4    OVER ( [ partition_by_clause ] order_by_clause )

參數

ALL
將聚合函數應用於所有值。ALL是默認值。

DISTINCT 
指定每個唯一值被考慮。DISTINCT對MIN無效,僅適用於ISO兼容性。

表達式
是常量,列名稱或函數,以及算術,按位和字符串運算符的任意組合。MIN可以與numeric,char,varchar,uniqueidentifier或datetime列一起使用,但不能與位列一起使用。不允許使用聚合函數和子查詢。

有關更多信息,請參閱表達式(Transact-SQL)

OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause將FROM子句生成的結果集划分為應用該函數的分區。如果未指定,則該函數將查詢結果集的所有行視為單個組。order_by_clause確定執行操作的邏輯順序。order_by_clause是必需的。有關更多信息,請參閱OVER子句(Transact-SQL)

返回類型

返回與表達式相同的值。

2.8.2 小結

MIN忽略任何空值。

使用字符數據列,MIN找到排序順序中最低的值。

在不使用OVER和ORDER BY子句的情況下,MIN是一個確定性函數。當用OVER和ORDER BY子句指定時,它是非確定性的。有關更多信息,請參閱確定性和非確定性函數

2.9  STDEV

返回指定表達式中所有值的統計標准偏差。

2.9.1  定義

1 -- Syntax for SQL Server and Azure SQL Database 
2 
3 STDEV ( [ ALL | DISTINCT ] expression ) 4    OVER ( [ partition_by_clause ] order_by_clause )

參數
ALL
將該功能應用於所有值。ALL是默認值。
DISTINCT
指定每個唯一值被考慮。
expression
是一個數字表達式。不允許使用聚合函數和子查詢。表達式是精確的數字或近似數字數據類型類別的表達式,除了位數據類型。
OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause將FROM子句生成的結果集划分為應用該函數的分區。如果未指定,則該函數將查詢結果集的所有行視為單個組。order_by_clause確定執行操作的邏輯順序。order_by_clause是必需的。有關更多信息,請參閱OVER子句(Transact-SQL)。
返回類型
浮點

2.9.2  小結

如果STDEV用於SELECT語句中的所有項目,則結果集中的每個值都包含在計算中。STDEV只能用於數字列。空值被忽略。

當沒有OVER和ORDER BY子句時,STDEV是一個確定性函數。當用OVER和ORDER BY子句指定時,它是非確定性的。有關更多信息,請參閱確定性和非確定性函數

 2.10  STDEP

返回指定表達式中所有值的總體統計標准偏差。

2.11  SUM

求和

2.12 VAR

返回指定表達式中所有值的統計方差。可能之后是OVER子句

2.13 VARP

返回指定表達式中所有值的總體統計方差。

3   參考文獻

【01】https://msdn.microsoft.com/zh-cn/library

【02】https://docs.microsoft.com/zh-cn/sql/t-sql/functions/functions

4   版權

 

  • 感謝您的閱讀,若有不足之處,歡迎指教,共同學習、共同進步。
  • 博主網址:http://www.cnblogs.com/wangjiming/。
  • 極少部分文章利用讀書、參考、引用、抄襲、復制和粘貼等多種方式整合而成的,大部分為原創。
  • 如您喜歡,麻煩推薦一下;如您有新想法,歡迎提出,郵箱:2016177728@qq.com。
  • 可以轉載該博客,但必須著名博客來源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM