9.15. 集約関数
集約関数は複数の入力値から単一の結果を計算します。表9-37に組み込み集約関数を示します。集約関数の特殊な構文に関する考察は項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の最小値
|
|
stddev(expression)
| smallint、int、bigint、real、double precisionもしくはnumeric
| 浮動小数点の引数であればdouble precision、それ以外はnumeric
| 入力値の標本標準偏差 |
| sum(expression) | smallint、int、bigint、real、double precision、numericもしくはinterval
| smallintまたはint型の引数であればbigint、bigint型の引数であればnumeric、浮動小数点の引数であればdouble precision、それ以外は引数のデータ型と同じ
| 全ての入力値にわたってexpressionの和 |
|
variance(expression)
| smallint、int、bigint、real、double precisionもしくはnumeric
| 浮動小数点の引数であればdouble precision、それ以外はnumeric
| 入力値の分散標本(標本標準偏差の2乗) |
上記の関数は、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により実行されます。