集約関数は複数の入力値から単一の結果を計算します。
表9-37および表9-38に組み込み集約関数を示します。
集約関数の特殊な構文に関する考察は項4.2.7で説明されています。その他の入門的な情報については、項2.7を参照してください。
表 9-37. 汎用目的の集約関数
| 関数 | 引数のデータ型 | 戻り値型 | 説明 |
|---|
avg(expression)
| smallint, int,
bigint, real, double
precision, numeric, or interval
| 整数型の引数であれば全てnumeric、浮動小数点の引数であればdouble precision、それ以外は引数のデータ型と同じ
| 全ての入力値の平均値(算術平均) |
bit_and(expression)
| smallint、int、bigint、もしくは
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
| equivalent to bool_and |
max(expression) | 配列全て、数値、string、date/time型のいずれか | 引数型と同一 | 全ての入力値間でのexpressionの最大値
|
min(expression) | 配列全て、数値、string、date/time型のいずれか | 引数型と同一 | 全ての入力値間での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-38に示します。
(これらは、より一般的に使用される集約関数との混乱を防ぐために別出ししました。)
説明の部分におけるNは、すべての入力式が非NULLの入力行の個数を表します。
すべての場合にて、例えばNが0の時など計算が無意味である場合にはNULLが返されます。
表 9-38. 統計処理用の集約関数
| 関数 | 引数の型 | 戻り値の型 | 説明 |
|---|
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
| 相関係数2乗値 |
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。それ以外では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。
| 入力値に対するサンプル分散(サンプル標準偏差の二乗)。
|