集約関数は複数の入力値から単一の結果を計算します。 表9-37および表9-38に組み込み集約関数を示します。 集約関数の特殊な構文に関する考察は項4.2.7で説明されています。その他の入門的な情報については、項2.7を参照してください。
表 9-37. 汎用目的の集約関数
上記の関数は、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. 統計処理用の集約関数