集約関数は複数の入力値から単一の結果を計算します。
表9-41および表9-42に組み込み集約関数を示します。
集約関数の特殊な構文に関する考察は項4.2.7で説明されています
表 9-41. 汎用集約関数
| 関数 | 引数のデータ型 | 戻り値型 | 説明 |
|---|
avg(expression)
| smallint, int,
bigint, real, double
precision, numeric, or interval
|
整数型の引数であれば全てnumeric、浮動小数点の引数であればdouble precision、それ以外は引数のデータ型と同じ
| 全ての入力値の平均値(算術平均) |
bit_and(expression)
| smallint, int, bigint, or
bit
|
引数のデータ型と同じ
| 全ての非NULLの入力値のビット積、非NULLの入力値がなければNULL |
bit_or(expression)
|
smallint、int、bigint、または
bit
|
引数のデータ型と同じ
| 全ての非NULLの入力値のビット和、非NULLの入力値がなければNULL |
bool_and(expression)
| bool
| bool
| 全ての入力が真ならば真、そうでなければ偽 |
bool_or(expression)
| bool
| bool
| 少なくとも1つの入力値が真ならば真。そうでなければ偽 |
count(*) | | bigint | 入力行の数 |
count(expression) | 全て | bigint |
expressionが非NULL値を持つ入力行の個数
|
every(expression)
| bool
| bool
| bool_andと等価 |
max(expression) | 全ての配列、数値、文字列、または日付時刻型 | 引数の型と同じ |
全ての入力値にわたりexpressionの最大値
|
min(expression) | 全ての配列、数値、文字列、または日付時刻型 | 引数の型と同じ |
全ての入力値にわたりexpressionの最小値
|
sum(expression) |
smallint、int、bigint、real、double precision、numeric、またはinterval
|
smallintまたはint型の引数であればbigint、bigint型の引数であればnumeric、浮動小数点の引数であればdouble precision、それ以外は引数のデータ型と同じ
| 全ての入力値にわたりexpressionの和 |
上記の関数は、count関数を除き、1行も選択されなかった場合NULL値を返すことに注意してください。特に、行の選択がないsum関数は、予想されるであろうゼロではなくNULLを返します。必要であれば、NULLをゼロと交換する目的でcoalesce関数を使うことできます。
注意:
bool_and、bool_or論理集約関数は標準SQLの集約関数every、anyまたはsomeに対応します。anyとsomeについてですが、標準の構文には曖昧さがあるようです。
SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;
ここで、ANYは、副問い合わせの先頭とも、選択式が1行を返すとしたら集約関数とも見なすことができます。従って、したがって、これらの集約関数に標準の名前をつけられません。
注意:
他のSQLデータベース管理システムでの作業に親しんだユーザは、count集約関数がテーブル全体に適用される場合の性能に驚かれるかも知れません。
SELECT count(*) FROM sometable;
のような問い合わせはテーブル全体を逐次スキャンを用いてPostgreSQLにより実行されます。
統計解析処理によく使用される集約関数を表9-42に示します。
(これらは、より一般的に使用される集約関数との混乱を防ぐために別出ししました。)
説明の部分におけるNは、すべての入力式が非NULLの入力行の個数を表します。
すべての場合にて、例えばNが0の時など計算が無意味である場合にはNULLが返されます。
表 9-42. 統計処理用の集約関数
| 関数 | 引数の型 | 戻り値の型 | 説明 |
|---|
corr(Y, X)
| double precision
| double precision
| 相関係数 |
covar_pop(Y, X)
| double precision
| double precision
| 母共分散 |
covar_samp(Y, X)
| double precision
| double precision
| 標本共分散 |
regr_avgx(Y, X)
| double precision
| double precision
| 独立変数の平均値
(sum(X)/N) |
regr_avgy(Y, X)
| double precision
| double precision
| 依存変数の平均値
(sum(Y)/N) |
regr_count(Y, X)
| double precision
| bigint
| 両式が非NULLとなる入力行の個数 |
regr_intercept(Y, X)
| double precision
| double precision
| (X, Y)の組み合わせで決まる、線型方程式に対する最小二乗法のY切片 |
regr_r2(Y, X)
| double precision
| double precision
| 相関係数自乗値 |
regr_slope(Y, X)
| double precision
| double precision
| X, Y)の組み合わせで決まる、最小自乗法に合う線型方程式の傾き |
regr_sxx(Y, X)
| double precision
| double precision
| sum(X^2) - sum(X)^2/N
(依存変数の"二乗和")
|
regr_sxy(Y, X)
| double precision
| double precision
| sum(X*Y) - sum(X) * sum(Y)/N
(依存変数×独立変数の"和")
|
regr_syy(Y, X)
| double precision
| double precision
| sum(Y^2) - sum(Y)^2/N
(独立変数の"自乗和") |
stddev(expression)
|
smallint、int、
bigint、real、double
precision、またはnumeric
| double precision for floating-point arguments,
otherwise numeric
| stddev_sampの歴史的な別名 |
stddev_pop(expression)
|
smallint、int、
bigint、real、double
precision、またはnumeric
|
浮動小数点型の引数ではdouble precision。それ以外ではnumeric
| 入力値に対する母標準偏差 |
stddev_samp(expression)
|
smallint、int、
bigint、real、double
precision、またはnumeric
|
浮動小数点型の引数ではdouble precision。それ以外ではnumeric
| 入力値に対する標本標準偏差 |
variance(expression)
|
smallint、int、
bigint、real、double
precision、またはnumeric
|
浮動小数点型の引数ではdouble precision。それ以外ではnumeric
| var_sampの歴史的な別名 |
var_pop(expression)
|
smallint、int、
bigint、real、double
precision、またはnumeric
|
浮動小数点型の引数ではdouble precision。それ以外ではnumeric
| 入力値に対する母分散(母標準偏差の自乗) |
var_samp(expression)
|
smallint、int、
bigint、real、double
precision、またはnumeric
|
浮動小数点型の引数ではdouble precision。それ以外ではnumeric
| 入力値に対する標本分散(標本標準偏差の二乗) |