分析関数は、行のグループに基づいて集計値を計算します。 これらは、各グループに対して複数の行を返すという点で集計関数とは異なります。 行のグループはウィンドウと呼ばれ、analytic_clause
によって定義されます。 行ごとに、行のスライディングウィンドウが定義されます。 ウィンドウは、現在の行の計算を実行するために使用される行の範囲を決定します。 ウィンドウサイズは、物理的な行数または時間などの論理的な間隔のいずれかに基づくことができます。
分析関数は、最後のORDER
BY
WHERE
GROUP
BY
HAVING
句は、分析関数が処理される前に完了します。 したがって、分析関数は、selectリストまたはORDER
BY
句にのみ使用できます。
分析関数は、累積集計、移動集計、中央集計、およびレポート集計を計算するために一般的に使用されます。
analytic_function::=
イラストの説明”analytic_function。
analytic_clause::=
イラストの説明”analytic_clause。gif”
query_partition_clause::=
イラスト”query_partition_clause.gif”
order_by_clause::=
イラストの説明”order_by_clause。gif”
windowing_clause::=
イラストの説明”windowing_clause。gif”
この構文のセマンティクスについては、以下のセクションで説明します。
analytic_function
分析関数の名前を指定します(このセマンティクスの説明に続く分析関数のリストを参照してください)。
引数
解析関数は0から3の引数を取ります。 引数には、任意の数値データ型または暗黙的に数値データ型に変換できる数値以外のデータ型を指定できます。 Oracleは、数値の優先順位が最も高い引数を決定し、残りの引数をそのデータ型に暗黙的に変換します。 戻り値の型は、個々の関数で特に指定がない限り、そのデータ型でもあります。
も参照してください:
“Numeric Precedence” for information on numeric precedence and Table 3-10, “Implicit Type Conversion Matrix” for more information on implicit conversion
analytic_clause
Use OVER
analytic_clause
to indicate that the function operates on a query result set. This clause is computed after the FROM
WHERE
GROUP
BY
, and HAVING
clauses. 選択リストまたはORDER
BY
句でこの句を使用して分析関数を指定できます。 分析関数に基づいてクエリの結果をフィルター処理するには、これらの関数を親クエリ内にネストし、ネストされたサブクエリの結果をフィルター処理
analytic_clauseに関する注意事項:次の注意事項はanalytic_clause
に適用されます。
-
analytic_clause
OVER
analytic_clause
を指定できます。 関数の作成を参照してください。
query_partition_clause
PARTITION
BY
value_expr
query_partition_clause
model_column_clauses
outer_join_clause
PARTITION
BY
キーを使用できます。照会されるオブジェクトにparallel属性があり、query_partition_clause
を使用して分析関数を指定すると、関数の計算も並列化されます。
照会されるオブジ
value_expr
order_by_clause
value_expr
で定義され、それぞれが順序シーケンスで修飾された複数のキーでパーティション内の値を順序付けできます。
各関数内で、複数の順序式を指定できます。 これは、2番目の式が最初の式の同一の値間の関係を解決できるためです。
order_by_clause
が複数の行に対して同じ値になるたびに、関数は次のように動作します:p>
-
CUME_DIST
DENSE_RANK
NTILE
PERCENT_RANK
RANK
それぞれに同じ結果を返します行の。p> -
ROW_NUMBER
order_by_clause
ORDER
BY
が合計順序を保証しない場合、非決定的である可能性があります。 -
他のすべての分析関数では、結果はウィンドウの仕様に依存します。 キーワード
RANGE
ROWS
で物理ウィンドウを指定すると、結果は非決定的になります。ORDER BY句の制限事項次の制限事項がORDER
BY
order_by_clause
expr
SIBLINGS
position
c_alias
order_by_clause
は、クエリまたはサブクエリ全体の順序付けに使用されたものと同じです。 -
An analytic function that uses the
RANGE
keyword can use multiple sort keys in itsORDER
BY
clause if it specifies any of the following windows:-
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
CURRENT
ROW
. The short form of this isRANGE
UNBOUNDED
PRECEDING
. -
RANGE
BETWEEN
CURRENT
ROW
AND
UNBOUNDED
FOLLOWING
-
RANGE
BETWEEN
CURRENT
ROW
AND
CURRENT
ROW
-
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
UNBOUNDED
FOLLOWING
これらの四つ以外のウィンドウ境界は、分析関数の
ORDER
BY
ROW
キーワードで指定されたウィンドウ境界には適用されません。 -
ASC/DESC順序シーケンス(昇順または降順)を指定します。 ASC
がデフォルトです。
NULLS FIRST|NULLS LAST nullを含む返された行を、順序付けシーケンスの最初または最後に表示するかどうかを指定します。p>
NULLS
LAST
NULLS
FIRST
order_by_clause
order_by_clause
order_by_clause
を使用します。この句の詳細については、SELECTのorder_by_clauseを参照してください。
windowing_clause
一部の分析関数では、windowing_clause
windowing_clause
を許可する関数の後にアスタリスク(*)が続きます。
ROWS|RANGEこれらのキーワードは、関数の結果を計算するために使用されるウィンドウ(行の物理的または論理的なセット)を行ごとに定義します。 この関数は、ウィンドウ内のすべての行に適用されます。 ウィンドウは、クエリ結果セットまたはパーティションを上から下に移動します。
-
ROWS
物理単位(行)でウィンドウを指定します。p> -
RANGE
order_by_clause
RANGE
order_by_clause
に式を1つだけ指定できます。 「ORDER BY句の制限事項」を参照してください。論理オフセットを持つ分析関数によって返される値は、常に決定論的です。 ただし、物理オフセットを持つ分析関数によって返される値は、順序式の結果が一意の順序でない限り、非決定的な結果を生成する可能性があります。 この一意の順序を実現するには、
order_by_clause
に複数の列を指定する必要がある場合があります。の間に。.. そして、
BETWEEN
AND
AND
AND
BETWEEN
を省略して1つの終点のみを指定した場合、Oracleはそれを開始点とみなし、終点はデフォルトで現在の行になります。BETWEEN
を指定した場合、Oracleはそれを開始点とみなし、終点は現在の行になります。UNBOUNDED PRECEDING
UNBOUNDED
PRECEDING
ウィンドウがパーティションの最初の行から始まることを示します。 これは開始点仕様であり、終了点仕様として使用することはできません。UNBOUNDED FOLLOWING
UNBOUNDED
FOLLOWING
ウィンドウがパーティションの最後の行で終了することを示します。 これは終了点仕様であり、開始点仕様として使用することはできません。現在の行を開始ポイントとして、
CURRENT
ROW
ROW
RANGE
value_expr
PRECEDING
にすることはできません。エンドポイントとして、
CURRENT
ROW
ROW
RANGE
value_expr
FOLLOWING
にすることはできません。p>value_expr先行またはvalue_expr次の
RANGE
ROW
:p>-
value_expr
FOLLOWING
value_expr
FOLLOWING
でなければなりません。 -
value_expr
PRECEDING
value_expr
PRECEDING
でなければなりません。時間間隔で定義された論理ウィンドウを数値形式で定義する場合は、変換関数を使用する必要がある場合があります。
時間間隔で定義された論理
も参照してください:数値時間を間隔に変換する方法については、NUMTOYMINTERVALとNUMTODSINTERVALを使用してください。
指定した場合
ROWS
:-
value_expr
は物理オフセットです。 定数または式である必要があり、正の数値に評価する必要があります。 -
value_expr
RANGE
:-
value_expr
論理オフセットです。 正の数値またはintervalリテラルに評価される定数または式である必要があります。 区間リテラルについては、”リテラル”を参照してください。order_by_clause
で指定できる式は1つだけです。 -
value_expr
ORDER
BY
expr
DATE
DATE
DATE
DATE
DATE
データ型。 -
If
value_expr
evaluates to an interval value, then theORDER
BY
expr
must be aDATE
data type.
If you omit the
windowing_clause
entirely, then the default isRANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
CURRENT
ROW
.Analytic functions are commonly used in data warehousing environments. 次の分析関数のリストでは、アスタリスク(*)が続く関数では、
windowing_clause
を含む完全な構文を使用できます。/P>
AVG*
CORR*
COUNT*
COVAR_POP*
COVAR_SAMP*
CUME_DIST
DENSE_RANK
FIRST
FIRST_VALUE*
LAG
LAST
LAST_VALUE*
LEAD
LISTAGG
MAX*
MEDIAN
MIN*
NTH_VALUE*
NTILE
PERCENT_RANK
ratio_TO_report
REGR_(線形回帰)関数*
ROW_number
STDDEV*
stddev_pop*
stddev_samp*
sum*
var_POP*
var_samp*
分散*次も参照してください。
これらの詳細については、ORACLE DATABASE data warehousing GUIDEを参照してください関数とその使用を示すシナリオのための
-
-