?
本文檔使用
php中文網(wǎng)手冊 發(fā)布
從一組輸入值里計算一個結(jié)果。表Table 9-42和表Table 9-43顯示了內(nèi)建的聚集函數(shù)。 聚集函數(shù)的特殊語法在Section 4.2.7里解釋。請參考Section 2.7獲取額外的介紹性信息
Table 9-42. 通用聚合函數(shù)
函數(shù) | 參數(shù)類型 | 返回類型 | 描述 |
---|---|---|---|
array_agg(expression)
|
any | 參數(shù)類型的數(shù)組 | 輸入值,包括空,連接到一個數(shù)組 |
avg(expression)
|
smallint,int, bigint,real,double precision,numeric, orinterval | 對于任何整數(shù)類型輸入,結(jié)果都是numeric類型。 對于任何浮點輸入,結(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 | 如果至少有一個輸入值為真,則為真,否則為假。 |
count(*) |
? | bigint | 輸入行數(shù) |
count(expression) |
any | bigint | 計算所有輸入行中滿足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)成一個字符串值,由分隔符分隔 |
sum(expression) |
smallint,int, bigint,real,double precision,numeric, or interval | 對于smallint或int輸入,輸出類型為bigint。對于bigint輸入, 輸出類型為numeric, 對于浮點數(shù)輸入,輸出類型為double precision。否則和輸入數(shù)據(jù)類型相同。 | 所有輸入行的expression總和。 |
xmlagg(expression)
|
xml | xml | 連接XML值(也可以參閱Section 9.14.1.7) |
請注意,除了count
以外,這些函數(shù)在沒有輸入行時返回 NULL 。
尤其要指出的是sum
函數(shù)在沒有輸入行時返回 NULL ,而不是零。
必要時可以用coalesce
把 NULL 替換成零。
Note:
bool_and
和bool_or
布爾聚合對應(yīng)標準的 SQL 聚合every
和any
或some
。 對于any
和some
,標準語法里面似乎有些內(nèi)置的歧義:SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;這里的
ANY
既可以被認為是引出一個子查詢,也可以被認為是一個 聚合函數(shù)(如果查詢表達式返回1行的話)。因此標準的名字無法用于這些聚合。
Note: 當
count
聚合應(yīng)用到整表,習(xí)慣了其它SQL數(shù)據(jù)庫管理系統(tǒng)的用戶可能會感到失望對它的性能表現(xiàn)。 一個類似下面這樣的查詢:SELECT count(*) FROM sometable;PostgreSQL將順序全表掃描執(zhí)行。
聚合函數(shù)array_agg
,string_agg
,
和xmlagg
,類似用戶定義的聚合函數(shù),根據(jù)輸入的值的順序
產(chǎn)生有意義不同的結(jié)果值。這個順序默認沒有指定,但是可以通過在聚合函數(shù)調(diào)用時,
寫一個ORDER BY子句來控制,顯示在Section 4.2.7。
另外,提供從一個已排序的子查詢的輸入值通常會工作。例如:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
但此語法在SQL標準里不允許,不能移植到其它數(shù)據(jù)庫系統(tǒng)。
Table 9-43顯示了用于統(tǒng)計分析的聚合函數(shù)。 (單獨列出這些函數(shù)僅僅是為了避免和那些經(jīng)常使用的聚集函數(shù)混在一起而已。) "描述"列中的N表示所有輸入行中 使得輸入表達式不為 NULL 的行數(shù)??偟膩碚f,如果計算本身變得沒有意義,那么返回值將是 NULL 。 例如當N為零的時候。
Table 9-43. 統(tǒng)計聚合函數(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 | 兩個表達式都不為 NULL 的輸入行數(shù) |
regr_intercept(Y,X)
|
double precision | double precision | 根據(jù)所有輸入的點(X,Y)按照最小二乘法擬合成一個線性方程, 然后返回該直線的 Y 軸截距 |
regr_r2(Y,X)
|
double precision | double precision | 相關(guān)系數(shù)的平方 |
regr_slope(Y,X)
|
double precision | double precision | 根據(jù)所有輸入的點(X, Y) 按照最小二乘法擬合成一個線性方程,然后返回該直線的斜率。 |
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 | 對于浮點類型的輸入返回double precision,其它輸入返回numeric。 | stddev_samp 的別名(歷史原因)
|
stddev_pop(expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對于浮點類型的輸入返回double precision,其它輸入返回numeric。 | 總體標準差 |
stddev_samp(expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對于浮點類型的輸入返回double precision,其它輸入返回numeric。 | 樣本標準差 |
variance (expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對于浮點類型的輸入返回double precision,其它輸入返回numeric。 | var_samp 的別名(歷史原因)
|
var_pop (expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對于浮點類型的輸入返回double precision,其它輸入返回numeric。 | 總體方差(總體標準差的平方) |
var_samp (expression)
|
smallint,int, bigint,real,double precision, ornumeric | 對于浮點類型的輸入返回double precision,其它輸入返回numeric。 | 樣本方差(樣本標準差的平方) |