すべてのプロダクト
Search
ドキュメントセンター

PolarDB:集計関数

最終更新日:May 31, 2024

集計関数は、入力値のセットから単一の結果を計算します。 パーシャルモードをサポートする集計関数は、並列集計などのさまざまな最適化に参加できます。

汎用集計関数

array_agg (anynonarray) → anyarray

nullを含むすべての入力値を配列に収集します。

任意

array_agg (anyarray) → anyarray

すべての入力配列を1つ高い次元の配列に連結します。 (入力はすべて同じ次元である必要があり、空またはnullにすることはできません。)

任意

avg (smallint) → 数値

avg (整数) → 数値

avg (bigint) → 数値

avg (numeric) → numeric

avg (リアル) → ダブル精度

avg (ダブル精度) → ダブル精度

avg (interval) → interval

null以外のすべての入力値の平均 (算術平均) を計算します。

bit_and (smallint) → smallint

bit_and (integer) → integer

bit_and (bigint) → bigint

bit_and (bit) → bit

null以外のすべての入力値のビット単位のANDを計算します。

bit_or (smallint) → smallint

bit_or (integer) → integer

bit_or (bigint) → bigint

bit_or (bit) → bit

null以外のすべての入力値のビット単位のORを計算します。

bool_and (boolean) → boolean

null以外の入力値がすべてtrueの場合はtrue、それ以外の場合はfalseを返します。

bool_or (boolean) → boolean

null以外の入力値がtrueの場合はtrue、それ以外の場合はfalseを返します。

count (*) → bigint

入力行数を計算します。

count ("any") → bigint

入力値がnullでない入力行数を計算します。

every (boolean) → boolean

これは、SQL標準のbool_andに相当します。

json_agg (anyelement) → json

jsonb_agg (anyelement) → jsonb

NULLを含むすべての入力値をJSON配列に収集します。 値は、_JSONまたは _jsonbのようにjsonに変換されます。

任意

json_object_agg (key "any", value "any") → json

jsonb_object_agg (key "any", value "any") → jsonb

すべてのキーと値のペアをJSONオブジェクトに収集します。 キー引数はテキストに強制され、値引数は _jsonまたは _jsonbに変換されます。 値はnullにできますが、キーにはできません。

任意

max (テキストを参照) → 入力タイプと同じ

null以外の入力値の最大値を計算します。 inetintervalmoneyoidpg_lsntid、およびこれらのタイプの配列に加えて、任意の数値、文字列、日付 /時刻、または列挙型で使用できます。

min (テキストを参照) → 入力タイプと同じ

null以外の入力値の最小値を計算します。 inetintervalmoneyoidpg_lsntid、およびこれらのタイプの配列に加えて、任意の数値、文字列、日付 /時刻、または列挙型で使用できます。

string_agg (value text, delimiter text) → text

string_agg (value bytea, delimiter bytea) → bytea

null以外の入力値を文字列に連結します。 最初の値の後の各値の前には、対応する区切り文字があります (nullでない場合) 。

任意

sum (smallint) → bigint

sum (integer) → bigint

sum (bigint) → numeric

sum (numeric) → numeric

sum (real) → real

sum (double precision) → double precision

sum (interval) → interval

合計 (お金) → お金

null以外の入力値の合計を計算します。

xmlagg (xml) → xml

null以外のXML入力値を連結します。

任意

countを除いて、これらの関数は、行が選択されていない場合にnull値を返します。 特に、sum of no rowsはゼロではなくnullを返し、array_aggは入力行がない場合は空の配列ではなくnullを返します。 coalesce関数は、必要に応じてゼロまたは空の配列をnullに置き換えるために使用できます。

集計関数array_aggjson_aggjsonb_aggjson_object_aggjsonb_object_aggstring_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を受け入れる関数は、smallintintegerbigintnumericreal、およびdouble precisionのすべての型で使用できます。 説明がNに言及している場合、それは、すべての入力式が非ヌルである入力行の数を意味する。 すべての場合において、計算が無意味である場合、例えば、Nがゼロである場合、nullが返される。

統計の集計関数

corr (Y double precisionX double precision) → double precision

相関係数を計算します。

covar_pop (Y double precision, X double precision) → double precision

母集団共分散を計算します。

covar_samp (Y double precision, X double precision) → double precision

サンプル共分散を計算します。

regr_avgx (Y double precision, X double precision) → double precision

独立変数の平均sum( X )/ Nを計算します。

regr_avgy (Y double precision, X double precision) → double precision

従属変数の平均sum( Y )/ Nを計算します。

regr_count (Y double precision, X double precision) → bigint

両方の入力がnull以外の行数を計算します。

regr_intercept (Y double precision, X double precision) → double precision

(X, y) 対によって決定される最小二乗適合線形方程式のY切片を計算する。

regr_r2 (Y double precision, X double precision) → double precision

相関係数の2乗を計算します。

regr_slope (Y double precision, X double precision) → double precision

(X, Y) 対によって決定される最小二乗適合線形方程式の傾きを計算する。

regr_sxx (Y double precision, X double precision) → double precision

独立変数の「二乗和」を計算します。sum( X ^ 2) - sum( X )^ 2/ N

regr_sxy (Y double precision, X double precision) → double precision

独立した時間依存変数の「積の和」を計算します。sum( X * Y) - sum( X) * sum( Y )/ N

regr_syy (Y double precision, X double precision) → double precision

従属変数の「二乗和」、sum( Y ^ 2) - sum( Y )^ 2/ Nを計算します。

stddev (numeric_type) → realまたはdouble precisionの場合はdouble precision、それ以外の場合はnumeric

これは、stddev_sampの履歴エイリアスです。

stddev_pop (numeric_type) → realまたはdouble precisionの場合はdouble precision、それ以外の場合はnumeric

入力値の母集団の標準偏差を計算します。

stddev_samp (numeric_type) → realまたはdouble precisionの場合はdouble precision、それ以外の場合はnumeric

入力値のサンプル標準偏差を計算します。

分散 (numeric_type) → realまたはdouble precisionの場合はdouble precision、それ以外の場合はnumeric

これは、var_sampの履歴エイリアスです。

var_pop (numeric_type) → realまたはdouble precisionの場合はdouble precision、それ以外の場合はnumeric

入力値の母集団分散 (母集団標準偏差の2乗) を計算します。

var_samp (numeric_type) → realまたはdouble precisionの場合はdouble precision、それ以外の場合はnumeric

入力値のサンプル分散 (サンプル標準偏差の2乗) を計算します。

Ordered-set aggregate functionsテーブルは、ordered-set aggregate構文を使用するいくつかの集計関数を示しています。 これらの関数は、「逆分布」関数と呼ばれることもある。 それらの集約された入力はORDER byによって導入され、集約されていないが一度だけ計算される直接引数を取ることもできます。 これらの関数はすべて、集約入力のnull値を無視します。 分数パラメータを取る場合、分数値は0と1の間でなければなりません。 そうでない場合はエラーがスローされます。 しかし、ヌルの分数値は、単にヌルの結果を生成する。

順序付きセット集計関数

mode () グループ内 (ORDER BY anyelement) → anyelement

集計された引数の最も頻度の高い値であるmodeを計算します (同じ頻度の値が複数ある場合は、最初の値を任意に選択します) 。 集計引数はソート可能な型でなければなりません。

任意

パーセンタイル_cont (fraction double precision) グループ内 (ORDER BY double precision) → double precision

パーセンタイル_cont (fraction double precision) グループ内 (ORDER BY interval) → interval

連続パーセンタイルを計算します。これは、集計された引数値の順序付きセット内の指定された分数に対応する値です。 これは、必要に応じて隣接する入力アイテム間を補間します。

任意

パーセンタイル_cont (fraction double precision[]) グループ内 (ORDER BY double precision) → double precision[]

パーセンタイル_cont (分数倍精度 []) グループ内 (ORDER BY interval) → interval[]

複数の連続パーセンタイルを計算します。 結果は、分数パラメータと同じ次元の配列であり、各非ヌル要素は、そのパーセンタイルに対応する (おそらく補間された) 値で置き換えられます。

任意

パーセンタイル_ディスク (fraction double precision) グループ内 (ORDER BY anyelement) → anyelement

離散パーセンタイルを計算します。これは、順序内の位置が指定された分数以上の集計引数値の順序付きセット内の最初の値です。 集計引数はソート可能な型でなければなりません。

任意

パーセンタイル_ディスク (fractions double precision[]) グループ内 (ORDER BY anyelement) → anyarray

複数の離散パーセンタイルを計算します。 結果は、分数パラメータと同じ次元の配列であり、各非ヌル要素は、そのパーセンタイルに対応する入力値で置き換えられます。 集計引数はソート可能な型でなければなりません。

任意

仮想集合集合関数にリストされている「仮想集合」集合のそれぞれは、同じ名前のウィンドウ関数に関連付けられています。 いずれの場合も、集計の結果は、argsから構築された「仮想」行が、sorted_argsによって表されるソートされた行のグループに追加された場合に、関連付けられたウィンドウ関数が返す値です。 これらの関数のそれぞれについて、argsで指定された直接引数のリストは、sorted_argsで指定された集約引数の数と型と一致する必要があります。 ほとんどの組み込みアグリゲートとは異なり、これらのアグリゲートは厳密ではありません。 ヌル値は、ORDER BY句で指定されたルールに従ってソートします。

仮説セット集計関数

rank (args) グループ内 (ORDER BY sorted_args) → bigint

仮想行のランクをギャップで計算します。ピアグループの最初の行の行番号。

任意

dense_rank (args) グループ内 (ORDER BY sorted_args) → bigint

ギャップなしで、仮想行のランクを計算します。 この関数は、ピアグループを効果的にカウントする。

任意

percent_rank (args) グループ内 (ORDER BY sorted_args) → double precision

仮想行の相対ランク、つまり (rank- 1) / (total rows - 1) を計算します。 したがって、値は0〜1の範囲である。

任意

cume_dist (args) グループ内 (ORDER BY sorted_args) → double precision

累積分布を計算します。つまり、(仮想行に先行する行または仮想行を持つピアの数) / (行の合計) です。 したがって、値は1/ Nから1の範囲である。

任意

グループ化操作

GROUPING (group_by_expression(s)) → integer

現在のグループ化セットに含まれていないGROUP BY式を示すビットマスクを返します。 ビットには、最下位ビットに対応する右端の引数が割り当てられる。 各ビットは、対応する式が、現在の結果行を生成するグループ化セットのグループ化基準に含まれる場合、0であり、含まれない場合、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は、makemodelも最後の行でグループ化されていないことを示します (したがって、すべての入力行の集計です) 。

メディアン

説明

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

GROUP BY句内の式。

戻り値の型

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

GROUP BY句内の式。

戻り値の型

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) &quot; 倉庫&quot; collect_warehouseから;
倉庫
-------------------------------------------------------------------------
{&quot; サウスレイク、テキサス&quot ;、&quot; サンフランシスコ&quot ;、&quot; ニュージャージー&quot ;、&quot; シアトル、ワシントン&quot;}"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"}