集計関数は、入力値のセットから単一の結果を計算します。 パーシャルモードをサポートする集計関数は、並列集計などのさまざまな最適化に参加できます。
汎用集計関数
nullを含むすべての入力値を配列に収集します。 | 任意 |
すべての入力配列を1つ高い次元の配列に連結します。 (入力はすべて同じ次元である必要があり、空またはnullにすることはできません。) | 任意 |
null以外のすべての入力値の平均 (算術平均) を計算します。 | 可 |
null以外のすべての入力値のビット単位のANDを計算します。 | 可 |
null以外のすべての入力値のビット単位のORを計算します。 | 可 |
null以外の入力値がすべてtrueの場合はtrue、それ以外の場合はfalseを返します。 | 可 |
null以外の入力値がtrueの場合はtrue、それ以外の場合はfalseを返します。 | 可 |
入力行数を計算します。 | 可 |
入力値がnullでない入力行数を計算します。 | 可 |
これは、SQL標準の | 可 |
NULLを含むすべての入力値をJSON配列に収集します。 値は、 | 任意 |
すべてのキーと値のペアをJSONオブジェクトに収集します。 キー引数はテキストに強制され、値引数は | 任意 |
null以外の入力値の最大値を計算します。 | 可 |
null以外の入力値の最小値を計算します。 | 可 |
null以外の入力値を文字列に連結します。 最初の値の後の各値の前には、対応する | 任意 |
null以外の入力値の合計を計算します。 | 可 |
null以外のXML入力値を連結します。 | 任意 |
countを除いて、これらの関数は、行が選択されていない場合にnull値を返します。 特に、sum of no rowsはゼロではなくnullを返し、array_aggは入力行がない場合は空の配列ではなくnullを返します。 coalesce関数は、必要に応じてゼロまたは空の配列をnullに置き換えるために使用できます。
集計関数array_agg、json_agg、jsonb_agg、json_object_agg、jsonb_object_agg、string_agg、およびxmlaggは、同様のユーザー定義集計関数に加えて、入力値の順序によって結果値が大きく異なります。 この順序は既定では指定されていませんが、集計呼び出し内にORDER by句を記述することで制御できます。 あるいは、ソートされたサブクエリから入力値を供給することは通常機能します。 設定例:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) ASタブ; 追加の処理により、集計が計算される前にサブクエリ出力が並べ替えられる可能性があるため、外部クエリレベルに結合などの追加の処理が含まれている場合、このアプローチは失敗する可能性があることに注意してください。
注
<span id="id-1.4.8.27.8.1" class="indexterm"></span><span id="id-1.4.8.27.8.2" class="indexterm"></span>
ブール集計bool_andとbool_orは、標準のSQL集計にすべて対応します。 標準構文にはあいまいさが組み込まれているため、PostgreSQLはすべてをサポートしますが、一部はサポートしません。''sql
SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...; ここで、ANYは、サブクエリがブール値を持つ1行を返す場合、サブクエリを導入するか、集計関数であると見なすことができます。 したがって、これらの集計に標準名を付けることはできません。
使用上の注意
他のSQLデータベース管理システムでの作業に慣れているユーザーは、テーブル全体に適用されるカウント集計のパフォーマンスに失望する可能性があります。 次のようなクエリ:
SELECT count(*) FROM sometable;データベースは、テーブル全体またはテーブル内のすべての行を含むインデックス全体をスキャンする必要があります。
統計テーブルの集計関数は、統計分析で通常使用される集計関数を示します。 (これらは、より一般的に使用される凝集体のリストを乱雑にすることを避けるためにのみ分離される。) numeric_typeを受け入れる関数は、smallint、integer、bigint、numeric、real、およびdouble precisionのすべての型で使用できます。 説明がNに言及している場合、それは、すべての入力式が非ヌルである入力行の数を意味する。 すべての場合において、計算が無意味である場合、例えば、Nがゼロである場合、nullが返される。
統計の集計関数
相関係数を計算します。 | 可 |
母集団共分散を計算します。 | 可 |
サンプル共分散を計算します。 | 可 |
独立変数の平均 | 可 |
従属変数の平均 | 可 |
両方の入力がnull以外の行数を計算します。 | 可 |
( | 可 |
相関係数の2乗を計算します。 | 可 |
( | 可 |
独立変数の「二乗和」を計算します。 | 可 |
独立した時間依存変数の「積の和」を計算します。 | 可 |
従属変数の「二乗和」、 | 可 |
これは、 | 可 |
入力値の母集団の標準偏差を計算します。 | 可 |
入力値のサンプル標準偏差を計算します。 | 可 |
これは、 | 可 |
入力値の母集団分散 (母集団標準偏差の2乗) を計算します。 | 可 |
入力値のサンプル分散 (サンプル標準偏差の2乗) を計算します。 | 可 |
Ordered-set aggregate functionsテーブルは、ordered-set aggregate構文を使用するいくつかの集計関数を示しています。 これらの関数は、「逆分布」関数と呼ばれることもある。 それらの集約された入力はORDER byによって導入され、集約されていないが一度だけ計算される直接引数を取ることもできます。 これらの関数はすべて、集約入力のnull値を無視します。 分数パラメータを取る場合、分数値は0と1の間でなければなりません。 そうでない場合はエラーがスローされます。 しかし、ヌルの分数値は、単にヌルの結果を生成する。
順序付きセット集計関数
集計された引数の最も頻度の高い値であるmodeを計算します (同じ頻度の値が複数ある場合は、最初の値を任意に選択します) 。 集計引数はソート可能な型でなければなりません。 | 任意 |
連続パーセンタイルを計算します。これは、集計された引数値の順序付きセット内の指定された | 任意 |
複数の連続パーセンタイルを計算します。 結果は、 | 任意 |
離散パーセンタイルを計算します。これは、順序内の位置が指定された | 任意 |
複数の離散パーセンタイルを計算します。 結果は、 | 任意 |
仮想集合集合関数にリストされている「仮想集合」集合のそれぞれは、同じ名前のウィンドウ関数に関連付けられています。 いずれの場合も、集計の結果は、argsから構築された「仮想」行が、sorted_argsによって表されるソートされた行のグループに追加された場合に、関連付けられたウィンドウ関数が返す値です。 これらの関数のそれぞれについて、argsで指定された直接引数のリストは、sorted_argsで指定された集約引数の数と型と一致する必要があります。 ほとんどの組み込みアグリゲートとは異なり、これらのアグリゲートは厳密ではありません。 ヌル値は、ORDER BY句で指定されたルールに従ってソートします。
仮説セット集計関数
仮想行のランクをギャップで計算します。ピアグループの最初の行の行番号。 | 任意 |
ギャップなしで、仮想行のランクを計算します。 この関数は、ピアグループを効果的にカウントする。 | 任意 |
仮想行の相対ランク、つまり ( | 任意 |
累積分布を計算します。つまり、(仮想行に先行する行または仮想行を持つピアの数) / (行の合計) です。 したがって、値は1/ | 任意 |
グループ化操作
現在のグループ化セットに含まれていない |
GROUPING関数の引数は実際には評価されませんが、関連するクエリレベルのGROUP BY句で指定された式と完全に一致する必要があります。 設定例:
=> SELECT * からitems_sold;
make | モデル | 販売
-------+-------+-------
フー | GT | 10
Foo | ツアー | 20
バー | シティ | 15
バー | スポーツ | 5
(4行)
=> SELECT make, model, GROUPING(make, model), sum(sales) FROM items_sold GROUP BY ROLLUP(make, model);
make | モデル | グループ化 | 合計
-------+-------+----------+-----
Foo | GT | 0 | 10
Foo | ツアー | 0 | 20
バー | シティ | 0 | 15
バー | スポーツ | 0 | 5
フー | | 1 | 30
バー | | 1 | 20
| | 3 | 50
(7行) ここで、最初の4行のグループ化値0は、両方のグループ化列にわたって正常にグループ化されていることを示している。 値1は、モデルが最後から2行目でグループ化されていないことを示し、値3は、makeもmodelも最後の行でグループ化されていないことを示します (したがって、すべての入力行の集計です) 。
メディアン
説明
MEDIANは、連続分布モデルを仮定する逆分布関数である。 数値または日時値を取り、値がソートされると中間値となる中間値または補間値を返します。 NULLは計算で無視されます。
構文
MEDIAN(expr) [ OVER (query_partition_clause) ]Parameters
パラメーター | 説明 |
expr | この関数は、数値データ型または数値データ型に暗黙的に変換できる非数値データ型を引数として受け取ります。 |
戻り値の型
exprのみを指定した場合、関数は引数の数値データ型と同じデータ型を返します。 OVER句を指定すると、データベースは数値の優先順位が最も高い引数を決定し、残りの引数をそのデータ型に暗黙的に変換し、そのデータ型を返します。
例
<bx id="1" type="code" text="code id=" vagfxr "title=" "uuid=" lj3p9k6m4x4je2wunwb "code=" create table median_test_t_1(i interval);
median_test_t_1値に挿入する (間隔「1日1秒」) 。median_test_t_1値に挿入する (間隔「2日1秒」) 。median_test_t_1値に挿入する (間隔「2日2秒」) 。median_test_t_1から中央値 (i) を選択します。中央値
-------------
02 00:00:01 "data-tag=" codeblock "outputclass=" language-sql ""/>create table median_test_t_1(i interval);
median_test_t_1値に挿入する (間隔「1日1秒」) 。median_test_t_1値に挿入する (間隔「2日1秒」) 。median_test_t_1値に挿入する (間隔「2日2秒」) 。median_test_t_1から中央値 (i) を選択します。
中央値
-------------
02 00:00:01 GROUPING_ID
説明
GROUPING_IDは、行に関連するGROUPINGビットベクトルに対応する数を返す。
GROUPING_IDは、ROLLUPやCUBEなどのGROUP BY拡張子とGROUPING関数を含むSELECTステートメントでのみ適用できます。
多くのGROUP BY式を含むクエリでは、特定の行のGROUP BYレベルを決定するには多くのGROUPING関数が必要であり、SQLが煩雑になります。 GROUPING_IDはこれらの場合に有用である。
GROUPING_IDは、複数のGROUPING関数の結果を取得し、それらをビットベクトル (1と0の文字列) に連結することと機能的に同等です。 GROUPING_IDを使用することで、複数のGROUPING関数の使用を回避し、行のフィルタリング条件を簡単に表現できます。 行フィルタリングは、GROUPING_ID = nという単一の条件で目的の行を識別できるため、GROUPING_IDを使用すると簡単になります。 この関数は、複数のレベルの集計が1つのテーブルに格納されている場合に特に役立ちます。
構文
GROUPING_ID(expr[, expr]...)Parameters
パラメーター | 説明 |
expr | |
戻り値の型
NUMBERデータ型の値を返します。
例
<bx id="1" type="code" text="code id=" 04b2704c1cnkb "title=" "uuid=" ljmv095i2qp6cb8qpin "code=" テーブルaggregate_functions_tb_agg(VARCHAR2_1 VARCHAR2(100) 、INTEGER_1 INTEGERGER);
aggregate_functions_tb_agg(VARCHAR2_1、INTEGER_1) 値 ('aggregate_functions_tb_agg '、10) に挿入します。選択sum(INTEGER_1),grouping_id(VARCHAR2_1) from aggregate_functions_tb_agg group by VARCHAR2_1;
sum | グループ化
----- ----------
10 | 0 "data-tag=" codeblock "outputclass=" language-sql ""/> テーブルaggregate_functions_tb_agg(VARCHAR2_1 VARCHAR2(100) 、INTEGER_1 INTEGER) を作成します。aggregate_functions_tb_agg(VARCHAR2_1、INTEGER_1) 値 ('aggregate_functions_tb_agg '、10) に挿入します。選択sum(INTEGER_1),grouping_id(VARCHAR2_1) from aggregate_functions_tb_agg group by VARCHAR2_1;
sum | グループ化
----- ----------
10 | 0 グルーピング
説明
GROUPINGは、スーパーアグリゲート行と通常のグループ化行を区別します。 ROLLUPやCUBEなどのGROUP BY拡張は、すべての値のセットがnullで表されるスーパーアグリゲート行を生成します。 GROUPING関数を使用すると、スーパーアグリゲート行のすべての値のセットを表すnullと通常の行のnullを区別できます。
GROUPING関数のexprは、GROUP BY句のいずれかの式と一致する必要があります。
構文
GROUPING(expr)Parameters
パラメーター | 説明 |
expr |
|
戻り値の型
NUMBERデータ型の値を返します。
行の
exprの値がすべての値のセットを表すnullの場合、関数は1の値を返します。それ以外の場合は0を返します。
例
<bx id="1" type="code" text="code id=" 331b159b1cxd2 "title=" "uuid=" ljmv0og4102czrg4ka2l "code=" temp view gstest1(a、b、v) を作成する
値として (1,1、10) 、(1,1、11) 、(1,2、12) 、(1,2、13) 、(1,3、14) 、(2,3,15),
(3,3、16) 、(3,4、17) 、(4,1,18) 、(4,1,19);
select a, b, grouping(a, b), sum(v), count(*), max(v)
rollup (a、b) によるgstest1グループから。a | b | グループ化 | sum | count | max
--- ---------- ------------------------------
1 | 1 | 0 | 21 | 2 | 11
1 | 2 | 0 | 25 | 2 | 13
1 | 3 | 0 | 14 | 1 | 14
1 | | 1 | 60 | 5 | 14
2 | 3 | 0 | 15 | 1 | 15
2 | | 1 | 15 | 1 | 15
3 | 3 | 0 | 16 | 1 | 16
3 | 4 | 0 | 17 | 1 | 17
3 | | 1 | 33 | 2 | 17
4 | 1 | 0 | 37 | 2 | 19
4 | | 1 | 37 | 2 | 19
| | 3 | 145 | 10 | 19 "data-tag=" codeblock "outputclass=" language-sql ""/> 一時ビューgstest1(a、b、v) を作成する
値として (1,1、10) 、(1,1、11) 、(1,2、12) 、(1,2、13) 、(1,3、14) 、
(2,3,15),
(3,3、16) 、(3,4、17) 、
(4,1,18) 、(4,1,19);
select a, b, grouping(a, b), sum(v), count(*), max(v)
rollup (a、b) によるgstest1グループから。
a | b | グループ化 | sum | count | max
--- ---------- ------------------------------
1 | 1 | 0 | 21 | 2 | 11
1 | 2 | 0 | 25 | 2 | 13
1 | 3 | 0 | 14 | 1 | 14
1 | | 1 | 60 | 5 | 14
2 | 3 | 0 | 15 | 1 | 15
2 | | 1 | 15 | 1 | 15
3 | 3 | 0 | 16 | 1 | 16
3 | 4 | 0 | 17 | 1 | 17
3 | | 1 | 33 | 2 | 17
4 | 1 | 0 | 37 | 2 | 19
4 | | 1 | 37 | 2 | 19
| | 3 | 145 | 10 | 19 GRUOP_ID
説明
GROUP_IDは、GROUP BY仕様から生じる重複グループを区別します。 これは、クエリ結果から重複したグループを除外するのに役立ちます。 重複するグループを一意に識別するNUMBERを返します。 この関数は、GROUP BY句を含むSELECTステートメントでのみ適用できます。
特定のグループにn個の重複が存在する場合、GROUP_IDは0〜n-1の範囲の数値を返します。
構文
GROUP_ID()戻り値の型
NUMBERデータ型の値を返します。
例
<bx id="1" type="code" text="code id=" 6999e3c91c6e6 "title=" "uuid=" ljmv126ngu8u74lplyw "code=" create table t(a int、b int、c int);
t(a、b、c) 値 (1、2、3) に挿入する。a, b, c, grouping(a, b, c), group_id() を、t group by cube(a, b, c) からa, b, c, grouping(a, b, c), group_id();
a | b | c | グループ化 | group_id
--- ---- ----------- --------------------
1 | 2 | 3 | 0 | 0
1 | 2 | | 1 | 0
1 | | 3 | 2 | 0
1 | | | 3 | 0
| 2 | 3 | 4 | 0
| 2 | | 5 | 0
| | 3 | 6 | 0
| | | 7 | 0 "data-tag=" codeblock "outputclass=" language-sql ""/> テーブルt(a int、b int、c int) を作成します。t(a、b、c) 値 (1、2、3) に挿入する。a, b, c, grouping(a, b, c), group_id() を、t group by cube(a, b, c) からa, b, c, grouping(a, b, c), group_id();
a | b | c | グループ化 | group_id
--- ---- ----------- --------------------
1 | 2 | 3 | 0 | 0
1 | 2 | | 1 | 0
1 | | 3 | 2 | 0
1 | | | 3 | 0
| 2 | 3 | 4 | 0
| 2 | | 5 | 0
| | 3 | 6 | 0
| | | 7 | 0 収集
説明
COLLECTは、任意の型の列を引数として受け取り、選択した行から入力型の入れ子になったテーブルを作成します。 この関数から正確な結果を得るには、CAST関数内で使用する必要があります。
列自体がコレクションである場合、COLLECTの出力はコレクションのネストされたテーブルです。
構文
COLLECT (カラム)Parameters
パラメーター | 説明 |
column | 任意のタイプの列。 |
戻り値の型
入力と同じ型のネストされたテーブルを返します。
例
<bx id="1" type="code" text="code id=" 867436461cj5c "title=" "uuid=" ljmv1h8o0evvv24xnpsj "code=" CREATE TABLE collect_warehouse
(warehouse_id NUMBER (3)
、warehouse_name VARCHAR2(35)
、location_id NUMBER(4)
);
CREATE TYPE collect_warehouse_name_t VARCHAR2のテーブルとして (35);
INSERT INTO collect_warehouse VALUES (1、「サウスレイク、テキサス」、1400);
INSERT INTO collect_warehouse VALUES (2、'San Francisco' 、1500);
INSERT INTO collect_warehouse VALUES (3、「ニュージャージー」、1600);
INSERT INTO collect_warehouse VALUES (4、「シアトル、ワシントン」、1700);
セレクトキャスト (COLLECT(warehouse_name) AS collect_warehouse_name_t) " 倉庫" collect_warehouseから;
倉庫
-------------------------------------------------------------------------
{" サウスレイク、テキサス" ;、" サンフランシスコ" ;、" ニュージャージー" ;、" シアトル、ワシントン"}"data-tag=" codeblock "outputclass=" language-sql ""/>CREATE TABLE collect_wareas
(warehouse_id NUMBER (3)
、warehouse_name VARCHAR2(35)
、location_id NUMBER(4)
);
CREATE TYPE collect_warehouse_name_t VARCHAR2のテーブルとして (35);
INSERT INTO collect_warehouse VALUES (1、「サウスレイク、テキサス」、1400);
INSERT INTO collect_warehouse VALUES (2、'San Francisco' 、1500);
collect_warehawaresVALUES (3、「ニュージャージー」、1600) に挿入します。INSERT INTO collect_warehouse VALUES (4、「シアトル、ワシントン」、1700);
SELECT CAST(COLLECT(warehouse_name) AS collect_warehouse_name_t) collect_warehouseからの「倉庫」;
倉庫
-------------------------------------------------------------------------
{"Southlake, Texas","San Francisco","New Jersey","Seattle, Washington"}