9.15. 集約関数

集約関数は複数の入力値から単一の結果を計算します。 表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) smallintintbigint、もしくは 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) smallintintbigintrealdouble precisionnumericもしくはinterval smallintまたはint型の引数であればbigintbigint型の引数であればnumeric、浮動小数点の引数であればdouble precision、それ以外は引数のデータ型と同じ 全ての入力値にわたってexpressionの和

上記の関数は、count関数を除き、1行も選択されなかった場合NULL値を返すことに注意してください。特に、行の選択がないsum関数は、予想されるであろうゼロではなくNULLを返します。必要であれば、NULLをゼロと交換する目的でcoalesce関数を使うことできます。

注意: bool_andbool_or論理集約関数は標準SQLの集約関数everyanyまたはsomeに対応します。anysomeについてですが、標準の構文には曖昧さがあるようです。

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) smallintintbigintrealdouble precisionnumeric 浮動小数点型の引数ではdouble precision。それ以外ではnumericstddev_sampの歴史的な別名
stddev_pop(expression) smallintintbigintrealdouble precisionnumeric 浮動小数点型の引数ではdouble precision。それ以外ではnumeric入力値に対する母標準偏差
stddev_samp(expression) smallintintbigintrealdouble precisionnumeric 浮動小数点型の引数ではdouble precision。それ以外ではnumeric入力値に対するサンプル標準偏差
variance(expression) smallintintbigintrealdouble precisionnumeric 浮動小数点型の引数ではdouble precision。それ以外ではnumericvar_sampの歴史的な別名
var_pop(expression) smallintintbigintrealdouble precisionnumeric 浮動小数点型の引数ではdouble precision。それ以外ではnumeric入力値に対する母分散(母標準偏差の二乗)。
var_samp(expression) smallintintbigintrealdouble precisionnumeric 浮動小数点型の引数ではdouble precision。それ以外ではnumeric入力値に対するサンプル分散(サンプル標準偏差の二乗)。