聚合函數對一組值計算后返回單個值。除了count(統計項數)函數以外,其他的聚合函數在計算式都會忽略空值(null)。所有的聚合函數均為確定性函數。即任何時候使用一組相同的輸入值調用聚合函數執行后的返回值都是相同的,無二義性。T-SQL提供的聚合函數一共有13個之多。
聚合函數通常會在下列場合使用:
1、select語句的選擇列表,包括子查詢和外部查詢。
2、使用compute或compute by產生匯總列時。
3、having子句對分組的數據記錄進行條件篩選。
聚合函數
1、平均值AVG
AVG函數用於計算精確型或近似型數據類型的平均值,bit類型除外,忽略null值。AVG函數計算時將計算一組數的總和,然后除以為null的個數,得到平均值。
語法結構:
avg( [ all | distinct ] expression )
all:為默認值,表示對所用的數據都計算平均值。
distinct:每個值的唯一值計算平均值,不管相同的值出現多次,多個行相同的值僅僅出現一次作為計算。
expression:精確或近似值的表達式。表達式內部不允許使用子查詢和其他聚合函數。
示例:
select avg(distinct age) from person -- 查詢person表里的年齡的平均值,相同值只計算一次
2、最小值MIN
MIN函數用於計算最小值,MIN函數可以適用於numeric、char、varchar或datetime、money或smallmoney列,但不能用於bit列。不允許使用聚合函數和子查詢,忽略null值。
語法結構:
min( [ all | distinct ] expression )
示例:
select min(age) from person -- 查詢person表里的年齡的最小值
3、最大值MAX
MAX函數用於計算最大值,忽略null值。max函數可以使用於numeric、char、varchar、money、smallmoney、或datetime列,但不能用於bit列。不允許使用聚合函數和子查詢。
語法結構:
MAX ( [ all | distinct ] expression )
示例:
select max(age) from person -- 查詢person表里的年齡的最大值
4、求和值SUM
SUM函數用於求和,只能用於精確或近似數字類型列(bit類型除外),忽略null值,不允許使用聚合函數和子查詢。
1、語法結構:
SUM ( [ all | distinct ] expression )
示例:
select sum(age) from person -- 查詢person表里的年齡的總和
5、統計項數值count(count_big)
count函數用於計算滿足條件的數據項數,返回int數據類型的值。
1、語法結構:
count( {[[ all | distinct] expression ] | * } )
這里的表達式是除text、image或ntext以外任何數據類型的表達式。但不允許使用聚合函數和子查詢。
2、常見使用方法
count(*) : 返回所有的項數,包括null值和重復項。而除了count(*)外,其他任何形式的count()函數都會忽略Null行。除了Count(*)函數外,其他任何聚合函數都會忽略NULL值,也就是說,AVG()參數里的值如果為Null則這一行會被忽略如計算平均值,這點要注意。
count(all表達式):返回非空的項數。
count(distinct表達式):返回唯一非空的項數
count_big的語法與count完全一樣,只不過返回值為bigint數據類型,這樣返回的數值范圍就可以大大超過count。
注意:count(字段名),如果字段名為NULL,則count函數不會統計。例如count(name),如果name為空,則不會統計到結果。
示例:
select count(distinct age) from person -- 查詢person表里的年齡唯一且非空的項數
6、計算標准偏差值STDEV
語法結構:
STDEV( [all | distinct ] expression )
這里的expression必須是一個數值表達式,不允許使用聚合函數和子查詢。表達式的值是精確或近似數值類型,但不包括bit數據類型。將忽略null值。
標准偏差是高中的東西,忘記干什么用的了,用到的時候再學回來吧。
示例:
select stdev(age) from person -- 查詢person表里的年齡的標准偏差
7、計算方差VAR
VAR函數用於計算指定表達式中所有值的方差。
語法結構:
VAR( [ all | distinct ] expression )
這里的expression表達式必須是一個數值表達式,不允許使用聚合函數和子查詢。表達式的值是精確或近似數值類型,但不包括bit數據類型,將忽略null值。
方差也是高中學的東西,忘了。
示例:
select var(age) from person -- 查詢person表里的年齡的方差
8、CHECKSUM_AGG
返回組中各值的校驗和。 將忽略 Null 值。CHECKSUM_AGG 可用於檢測表中的更改。表中行的順序不影響 CHECKSUM_AGG 的結果。此外,CHECKSUM_AGG 函數還可與 DISTINCT 關鍵字和 GROUP BY 子句一起使用。如果表達式列表中的某個值發生更改,則列表的校驗和通常也會更改。但只在極少數情況下,校驗值會保持不變。
語法如下:
CHECKSUM_AGG ( [ ALL | DISTINCT ] expression )
參數說明:
ALL:對所有的值進行聚合函數運算。 ALL 為默認值。
DISTINCT :指定 CHECKSUM_AGG 返回唯一校驗值。
expression :一個整數表達式。 不允許使用聚合函數和子查詢。
SELECT CHECKSUM_AGG(Account_Age) FROM Account GO UPDATE Account SET Account_Age = 30 WHERE Account_Id = 6 GO SELECT CHECKSUM_AGG(Account_Age) FROM Account
顯示結果如下:
可見隨着表的更改,該系統函數返回的值也變了。此函數的作用正在於此,檢測表的更改。
9、COUNT_BIG
返回組中的項數。 COUNT_BIG 的用法與 COUNT 函數類似。 兩個函數唯一的差別是它們的返回值。 COUNT_BIG 始終返回 bigint 數據類型值。 COUNT 始終返回 int 數據類型值。
10、STDEVP
11、GROUPING
12、GROUPING_ID
13、VARP