無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

9.20. 集約関数

集約関数 は複数の入力値から単一の結果を計算します。 表9-46 および 表9-47 に組み込み集約関数を示します。 集約関数の特殊な構文に関する考察は 項4.2.7 で説明されています。また、初歩的な情報については 項2.7 を参照して下さい。

表 9-46. 汎用集約関数

関数 引数のデータ型 戻り値型 説明
array_agg( expression ) any 引数型の配列 配列に連結されたNULLを含む入力値
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 と等価
json_agg( record ) record json オブジェクトのJSON配列としてレコードを集約
max( expression ) 全ての配列、数値、文字列、または日付時刻型 引数の型と同じ 全ての入力値にわたり expression の最大値
min( expression ) 全ての配列、数値、文字列、または日付時刻型 引数の型と同じ 全ての入力値にわたり expression の最小値
string_agg( expression , delimiter ) ( text , text )または( bytea , bytea ) 引数と同じ型 入力された値が指定したデリミタで区切られた一つの文字列に連結されます。
sum( expression ) smallint int bigint real double precision numeric 、または interval smallint または int 型の引数であれば bigint bigint 型の引数であれば numeric 、浮動小数点の引数であれば double precision 、それ以外は引数のデータ型と同じ 全ての入力値に渡り expression の和
xmlagg( expression ) xml xml XML値の連結( 項9.14.1.7 も参照)

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

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

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;

ここで、副問い合わせが論理値での1行を返す場合、 ANY は副問い合わせを導入するもの、もしくは集約関数であるものいずれかとみなすことができます。 従って、これらの集約関数に標準の名前を付けることはできません。

注意: 他のSQLデータベース管理システムでの作業に親しんだユーザは、 count 集約関数がテーブル全体に適用される場合の性能に失望するかも知れません。

SELECT count(*) FROM sometable;

のような問い合わせはテーブルサイズに比例した労力が必要です。 PostgreSQL はテーブル全体か、そのテーブルの全ての行を含んだインデックス全体のスキャンを必要とします。

集約関数 array_agg json_agg string_agg 、および xmlagg 、そして類似のユーザ定義の集約関数は、入力値の順序に依存した意味のある別の結果値を生成します。この並び順はデフォルトでは指定されませんが、 項4.2.7 に記述されているように、集計呼び出し中に ORDER BY 句を書くことで制御可能となります。別の方法として、並び替えられた副問い合わせから入力値を供給することでも上手くいきます。例をあげます。

SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;

しかしこの構文はSQL標準では許されておらず、他のデータベースシステムに移植性はありません。

統計解析処理によく使用される集約関数を 表9-47 に示します。 (これらは、より一般的に使用される集約関数との混乱を防ぐために別出ししました。) 説明の部分における N は、すべての入力式が非NULLの入力行の個数を表します。 すべての場合にて、例えば N が0の時など計算が無意味である場合にはNULLが返されます。

表 9-47. 統計処理用の集約関数

関数 引数の型 戻り値の型 説明
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 。それ以外では 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 入力値に対する標本分散(標本標準偏差の二乗)

powered by SEO.CUG.NET