?
This document uses PHP Chinese website manual Release
從一組輸入值里計(jì)算一個(gè)結(jié)果。表Table 9-42和表Table 9-43顯示了內(nèi)建的聚集函數(shù)。 聚集函數(shù)的特殊語(yǔ)法在Section 4.2.7里解釋。請(qǐng)參考Section 2.7獲取額外的介紹性信息
Table 9-42. 通用聚合函數(shù)
函數(shù) | 參數(shù)類型 | 返回類型 | 描述 |
---|---|---|---|
array_agg(expression)
|
any | 參數(shù)類型的數(shù)組 | 輸入值,包括空,連接到一個(gè)數(shù)組 |
avg(expression)
|
smallint,int, bigint,real,double precision,numeric, orinterval | 對(duì)于任何整數(shù)類型輸入,結(jié)果都是numeric類型。 對(duì)于任何浮點(diǎn)輸入,結(jié)果都是double precision類型。否則和輸入數(shù)據(jù)類型相同。 | 所有輸入值的均值(算術(shù)平均) |
bit_and(expression)
|
smallint,int,bigint, or bit | 與參數(shù)數(shù)據(jù)類型相同 | 所有非 NULL 輸入值的按位與(AND),如果全部輸入值皆為 NULL ,那么結(jié)果也為 NULL |
bit_or(expression)
|
smallint,int,bigint, or bit | 與參數(shù)數(shù)據(jù)類型相同 | 所有非 NULL 輸入值的按位或(OR),如果全部輸入值皆為 NULL ,那么結(jié)果也為 NULL |
bool_and(expression)
|
bool | bool | 如果所有輸入值都是真,則為真,否則為假。 |
bool_or(expression)
|
bool | bool | 如果至少有一個(gè)輸入值為真,則為真,否則為假。 |
count(*) |
? | bigint | 輸入行數(shù) |
count(expression) |
any | bigint | 計(jì)算所有輸入行中滿足expression不為 NULL 的行數(shù) |
every(expression)
|
bool | bool | 等效于bool_and
|
max(expression) |
any array, numeric, string, or date/time type | 和參數(shù)數(shù)據(jù)類型相同 | 所有輸入行中expression的最大值 |
min(expression) |
any array, numeric, string, or date/time type | 和參數(shù)數(shù)據(jù)類型相同 | 所有輸入行中expression的最小值 |
string_agg(expression,
delimiter)
|
text,text | text | 輸入串聯(lián)成一個(gè)字符串值,由分隔符分隔 |
sum(expression) |
smallint,int, bigint,real,double precision,numeric, or interval | 對(duì)于smallint或int輸入,輸出類型為bigint。對(duì)于bigint輸入, 輸出類型為numeric, 對(duì)于浮點(diǎn)數(shù)輸入,輸出類型為double precision。否則和輸入數(shù)據(jù)類型相同。 | 所有輸入行的expression總和。 |
xmlagg(expression)
|
xml | xml | 連接XML值(也可以參閱Section 9.14.1.7) |
請(qǐng)注意,除了count
以外,這些函數(shù)在沒有輸入行時(shí)返回 NULL 。
尤其要指出的是sum
函數(shù)在沒有輸入行時(shí)返回 NULL ,而不是零。
必要時(shí)可以用coalesce
把 NULL 替換成零。
Note:
bool_and
和bool_or
布爾聚合對(duì)應(yīng)標(biāo)準(zhǔn)的 SQL 聚合every
和any
或some
。 對(duì)于any
和some
,標(biāo)準(zhǔn)語(yǔ)法里面似乎有些內(nèi)置的歧義:SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;這里的
ANY
既可以被認(rèn)為是引出一個(gè)子查詢,也可以被認(rèn)為是一個(gè) 聚合函數(shù)(如果查詢表達(dá)式返回1行的話)。因此標(biāo)準(zhǔn)的名字無法用于這些聚合。
Note: 當(dāng)
count
聚合應(yīng)用到整表,習(xí)慣了其它SQL數(shù)據(jù)庫(kù)管理系統(tǒng)的用戶可能會(huì)感到失望對(duì)它的性能表現(xiàn)。 一個(gè)類似下面這樣的查詢:SELECT count(*) FROM sometable;PostgreSQL將順序全表掃描執(zhí)行。
聚合函數(shù)array_agg
,string_agg
,
和xmlagg
,類似用戶定義的聚合函數(shù),根據(jù)輸入的值的順序
產(chǎn)生有意義不同的結(jié)果值。這個(gè)順序默認(rèn)沒有指定,但是可以通過在聚合函數(shù)調(diào)用時(shí),
寫一個(gè)ORDER BY子句來控制,顯示在Section 4.2.7。
另外,提供從一個(gè)已排序的子查詢的輸入值通常會(huì)工作。例如:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
但此語(yǔ)法在SQL標(biāo)準(zhǔn)里不允許,不能移植到其它數(shù)據(jù)庫(kù)系統(tǒng)。
Table 9-43顯示了用于統(tǒng)計(jì)分析的聚合函數(shù)。 (單獨(dú)列出這些函數(shù)僅僅是為了避免和那些經(jīng)常使用的聚集函數(shù)混在一起而已。) "描述"列中的N表示所有輸入行中 使得輸入表達(dá)式不為 NULL 的行數(shù)。總的來說,如果計(jì)算本身變得沒有意義,那么返回值將是 NULL 。 例如當(dāng)N為零的時(shí)候。
Table 9-43. 統(tǒng)計(jì)聚合函數(shù)
函數(shù) | 參數(shù)類型 | 返回類型 | 描述 |
---|---|---|---|
corr(Y,X)
|
double precision | double precision | 相關(guān)系數(shù) |
covar_pop(Y,X)
|
double precision | double precision | 總體協(xié)方差 |
covar_samp(Y,X)
|
double precision | double precision | 樣本協(xié)方差 |
regr_avgx(Y,X)
|
double precision | double precision | 自變量的平均值 (sum(X)/N) |
regr_avgy(Y,X)
|
double precision | double precision | 因變量的平均值 (sum(X)/N)。 |
regr_count(Y,X)
|
double precision | bigint | 兩個(gè)表達(dá)式都不為 NULL 的輸入行數(shù) |
regr_intercept(Y,X)
|
double precision | double precision | 根據(jù)所有輸入的點(diǎn)(X,Y)按照最小二乘法擬合成一個(gè)線性方程, 然后返回該直線的 Y 軸截距 |
regr_r2(Y,X)
|
double precision | double precision | 相關(guān)系數(shù)的平方 |
regr_slope(Y,X)
|
double precision | double precision | 根據(jù)所有輸入的點(diǎn)(X, Y) 按照最小二乘法擬合成一個(gè)線性方程,然后返回該直線的斜率。 |
regr_sxx(Y,X)
|
double precision | double precision | sum(X^2) - sum(X)^2/N("sum of squares"of the independent variable) |
regr_sxy(Y,X)
|
double precision | double precision | sum(X*Y) - sum(X) * sum(Y)/N("sum of products"of independent times dependent variable) |
regr_syy(Y,X)
|
double precision | double precision | sum(Y^2) - sum(Y)^2/N("sum of squares"of the dependent variable) |
stddev(expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對(duì)于浮點(diǎn)類型的輸入返回double precision,其它輸入返回numeric。 | stddev_samp 的別名(歷史原因)
|
stddev_pop(expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對(duì)于浮點(diǎn)類型的輸入返回double precision,其它輸入返回numeric。 | 總體標(biāo)準(zhǔn)差 |
stddev_samp(expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對(duì)于浮點(diǎn)類型的輸入返回double precision,其它輸入返回numeric。 | 樣本標(biāo)準(zhǔn)差 |
variance (expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對(duì)于浮點(diǎn)類型的輸入返回double precision,其它輸入返回numeric。 | var_samp 的別名(歷史原因)
|
var_pop (expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對(duì)于浮點(diǎn)類型的輸入返回double precision,其它輸入返回numeric。 | 總體方差(總體標(biāo)準(zhǔn)差的平方) |
var_samp (expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對(duì)于浮點(diǎn)類型的輸入返回double precision,其它輸入返回numeric。 | 樣本方差(樣本標(biāo)準(zhǔn)差的平方) |