標籤:
彙總函式對一組值計算後返回單個值。除了count(統計項數)函數以外,其他的彙總函式在計算式都會忽略空值(null)。所有的彙總函式均為確定性函數。即任何時候使用一組相同的輸入值調用彙總函式執行後的傳回值都是相同的,無二義性。T-SQL提供的彙總函式一共有13個之多。
彙總函式通常會在下列場合使用:
1、select語句的挑選清單,包括子查詢和外部查詢。
2、使用compute或compute by產生匯總列時。
3、having子句對分組的資料記錄進行條件式篩選。
彙總函式
1、平均值AVG
AVG函數用於計算精確型或近似型資料類型的平均值,bit類型除外,忽略null值。AVGFunction Compute時將計算一組數的總和,然後除以為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 AccountGOUPDATE Account SET Account_Age = 30 WHERE Account_Id = 6GOSELECT 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
SQL Server彙總函式