分析関数

分析関数は行のグループに基づいて集計値を計算します。集計関数との違いは、グループごとに複数の行を戻す点です。この行のグループはウィンドウと呼ばれ、analytic_clauseで定義されます。

分析関数は、問合せで最後に実行される演算(最後のORDER BY句を除く)の集合です。すべての結合、WHERE句、GROUP BY句およびHAVING句は、分析関数が処理される前に実行されます。最後のORDER BY句は、分析関数の結果を順序変更するために使用されます。分析関数は、問合せまたは副問合せの選択リスト、およびORDER BY句に指定できます。

分析関数を使用すると、問合せの結果セットをパーティションと呼ばれる行グループに分割できます。列または式でパーティションを定義できます。問合せ結果セットは、すべての行を持つ1つのパーティション、少数の大きなパーティション、またはそれぞれが数行しか持たない多数の小さなパーティションに分割可能です。

パーティションの行ごとに、スライディング・ウィンドウを定義できます。このウィンドウで、カレント行の計算に使用される行の範囲が決まります。ウィンドウ・サイズは、行の物理的な数に基づきます。ウィンドウには開始行および終了行があり、片方の端または両方の端で移動できます。たとえば、累積SUM関数を定義したウィンドウには、パーティションの最後の行に固定された開始行が含まれ、終了行は開始点からパーティションの最後の行までスライドします。反対に、移動平均を定義したウィンドウには開始点と終了点の両方のスライドが含まれます。

ウィンドウは、パーティションのすべての行、またはパーティション内の1行と同じ大きさに設定できます。

各関数には、複数の順序式を指定できます。これは、2番目の式が最初の式にある同一値との間の関連性を変換できるため、値をランク付けする関数を使用する場合に有効です。

通常、分析ファンクションは、累積集計、移動集計、センター集計およびレポート集計の実行に使用されます。

制限:

  • 分析関数は、マテリアライズド・ビューではサポートされていません。

分析関数のリストは、次のとおりです。アスタリスク(*)付きの関数は、WindowingClauseをサポートしています。

SQL構文

分析関数の構文:

AnalyticFunctionName ([arguments]) OVER ([AnalyticClause])

AnalyticClause::= QueryPartitionClause [ORDER BY OrderByClause [,...]
                                          [WindowingClause]] |
                  ORDER BY OrderByClause [,...] [WindowingClause]

QueryPartitionClause::= PARTITION BY { Expression[,Expression]... |
                                      (Expression [,Expression]...) 
                                     }

OrderByClause::= Expression [ASC|DESC] [NULLS {FIRST|LAST}]

WindowingClause::= ROWS { BETWEEN StartPoint AND EndPoint |
                          StartPoint
                        }

StartPoint::= UNBOUNDED PRECEDING | CURRENT ROW | PosNumConstantExpr 
                                                    { PRECEDING | FOLLOWING }

EndPoint::= UNBOUNDED FOLLOWING | CURRENT ROW | PosNumConstantExpr
                                                   { PRECEDING | FOLLOWING }

パラメータ

パラメータ 説明

AnalyticFunctionName

分析関数の名前。

arguments

分析関数の引数。引数の数は分析関数によって異なります。関数に対する引数の詳細は、特定の関数を参照してください。

OVER ( [ AnalyticClause ] )

関数が分析関数であることを示します。この句は、FROMWHEREGROUP BYおよびHAVING句の後に計算されます。

AnalyticClauseを指定しない場合、分析関数は、パーティション化や順序変更を行わず、またはウィンドウを使用せずに結果セット全体で評価されます。

QueryPartitionClause

AnalyticClauseで使用されるオプションの句。PARTITION BY句で示されます。指定すると、Expressionリストに基づいて、問合せ結果セットがグループにパーティション化されます。この句を省略すると、ファンクションは問合せ結果セットのすべての行を単一のグループとして扱います。

同じまたは異なるPARTITIONキーを使用して、同じ問合せに複数の分析関数を指定できます。

Expressionに有効な値は、定数、列、非分析関数または関数式です。

ORDER BY OrderByClause

AnalyticClauseで使用されるオプションの句。この句を使用して、パーティション内のデータの順序を指定します。Expressionは、列の名前または位置には指定できません。

各キーがExpressionで定義され、順序付けシーケンスで修飾された複数キーのパーティション内での値を順序付けできます。

分析関数は、この句で指定された順序で動作します。ただし、この句は、結果の順序は保証しません。最終結果の順序を保証するには、問合せのORDER BY句を使用してください。

ORDER BY OrderByClauseを指定し、QueryPartitionClauseまたはWindowingClauseを指定しない場合、デフォルト・ウィンドウはROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWになります。

ORDER BY OrderByClauseを指定しないと、順序は不確定になります。

ASC | DESC

順序付けシーケンス(昇順または降順)を指定します。デフォルトはASCです。

句はオプションです。

NULLS FIRST | NULLS LAST

NULL値を含む行を、順序付けシーケンスの最初に指定するか最後に指定するかを指定します。NULLS LASTは、昇順のデフォルトです。NULLS FIRSTは、降順のデフォルトです。

句はオプションです。

WindowingClause

句は、ROWSキーワードで示されます。物理単位(行)で表されるウィンドウを行ごとに指定します。ウィンドウは、関数結果の計算に使用されます。関数は、ウィンドウのすべての行に適用されます。ウィンドウは、問合せ結果セット内またはパーティションの上から下まで移動します。

ORDER BY OrderByClauseを指定しないと、WindowingClauseを指定できません。

分析関数が戻す値は、順序付けシーケンスの結果が一意の順序でなければ非決定的な結果を生成することがあります。この場合、OrderByClauseに複数の列を指定して、順序を一意にします。

WindowingClauseが使用可能な関数のリストは、「分析関数」を参照してください。

BETWEEN...AND

BETWEEN...AND句は、ウィンドウの開始点(StartPoint)と終了点(EndPoint)を指定するために使用します。

BETWEEN...AND句を省略して終了点を1つ指定しようとすると、TimesTenはこの終了点を開始点とみなし、デフォルトでカレント行を終了点に指定します。

StartPoint

有効な値は、UNBOUNDED PRECEDINGCURRENT ROWPosNumConstantExpr PRECEDINGまたはPosNumConstantExpr FOLLOWINGです。

PosNumConstantExprは、正の定数値または結果が正の整数値になる式のいずれかである必要があります。

EndPoint

有効な値は、UNBOUNDED FOLLOWINGCURRENT ROWPosNumConstantExpr PRECEDINGまたはPosNumConstantExpr FOLLOWINGです。

PosNumConstantExprは、正の定数値または結果が正の整数値になる式のいずれかである必要があります。

UNBOUNDED PRECEDING

UNBOUNDED PRECEDINGを使用して、パーティションの最初の行でウィンドウが開始することを示します。

終了点として使用することはできません。

UNBOUNDED FOLLOWING

UNBOUNDED FOLLOWINGを使用して、パーティションの最後の行でウィンドウが終了することを示します。

開始点として使用することはできません。

CURRENT ROW

CURRENT ROWが開始点のとき、ウィンドウがカレント行から始まることを指定します。この場合は、PosNumConstantExpr PRECEDINGを終了点にすることはできません。

CURRENT ROWが終了点のとき、ウィンドウがカレント行で終了することを指定します。この場合は、PosNumConstantExpr FOLLOWINGを開始点にすることはできません。

PosNumConstantExpr {PRECEDING | FOLLOWING }

PosNumConstantExpr FOLLOWINGが開始点の場合、終了点はPosNumConstantExpr FOLLOWINGまたはUNBOUNDED FOLLOWINGにする必要があります。PosNumConstantExpr PRECEDINGが終了点の場合、開始点はPosNumConstantExpr PRECEDINGまたはUNBOUNDED PRECEDINGにする必要があります。

終了点のPosNumConstantExprは、開始点のPosNumConstantExpr以上にする必要があります。

PosNumConstantExprは、正の定数値または結果が正の整数値になる式のいずれかである必要があります。