ウィンドウ関数
ウィンドウ関数は、集計関数、ランキング関数または分析関数と、ウィンドウ計算のオーバー句を組み合せます。
構文
window_function ::= aggregate_function over_clause | ranking_function over_clause | analytic_function over_clause
ウィンドウ関数には次のものがあります。
aggregate_function: サポートされている集計関数については、集計関数を参照してください例:
AVG(SALES.AMOUNT_SOLD) OVER (PARTITION BY SALES.CUST_ID)ranking_function: パーティション化された結果セット内でランキング操作を実行します。構文:ranking_function::= ROW_NUMBER'(' ')'| RANK'(' ')'| DENSE_RANK'(' ')' | PERCENT_RANK'(' ')'ROW_NUMBER(): 結果セットの各行に一意の番号を割り当てます。RANK(): 各行にランクを割り当て、タイのギャップがあります。DENSE_RANK(): 各行にランクを割り当てます。タイのギャップはありません。PERCENT_RANK(): 行の相対ランクをパーセントで計算します。
例:
ROW_NUMBER() OVER (PARTITION BY SALES.CUST_ID ORDER BY SALES.AMOUNT_SOLD DESC NULLS LAST)analytic_function: 指定された順序に基づく結果セット内の前または次の行から値を取得します。構文:
analytic_function::= {LAG | LEAD} '('value_returned_expression[, offset[, default]]')'offset::= value_returned_expressiondefault::= value_returned_expressionLAG(): オフセットに基づいて前の行の値を返します。LEAD(): オフセットに基づいて後続の行の値を返します。offset: 値は、存在する場合は整数である必要があります。 現在の行から戻された値を取得する行数。 指定しない場合、デフォルトは1です。default: NULL値に使用されるデフォルト値。
例:
LAG(SALES.AMOUNT_SOLD, 1, 0) OVER (PARTITION BY SALES.CUST_ID ORDER BY SALES.AMOUNT_SOLD DESC)over_clause: ウィンドウ関数のパーティション化、順序付けおよびフレームを指定します。構文:over_clause::= OVER '(' [ partition_by_clause] [order_by_clause] [ frame_clause ]')' partition_by_clause::= PARTITION BY value_returned_expression_list order_by_clause ::= ORDER BY value_returned_expression [ASC|DESC] [NULLS FIRST|LAST)] (, value_returned_expression [ASC|DESC] [NULLS(FIRST|LAST)])⦠frame_clause::= (ROWS | RANGE) (frame_start | frame_between) frame_between::= BETWEEN frame_start AND frame_end frame-start::= UNBOUNDED PRECEDING | unsigned_integer PRECEDING | CURRENT ROW frame_end::= UNBOUNDED FOLLOWING | unsigned_integer FOLLOWING | CURRENT ROWpartition_by_clause: PARTITION BY式を使用して行をグループ化します。order_by_clause: ORDER BY式を使用して行を順序付けします。- オプションで、行を昇順でソートするか降順でソートするかを指定します。
構文:
[ ASC | DESC ] - オプションで、NULL値をNULL以外の値の前後に戻すかどうかを指定します。
構文:
NULLS [ FIRST | LAST ]
- オプションで、行を昇順でソートするか降順でソートするかを指定します。
frame_clause: ウィンドウ・フレームを定義します。frame-startおよびframe_end:UNBOUNDED PRECEDING: 最初の行から開始します。unsigned_integer PRECEDING: 現在の行の前にn行を開始します。CURRENT ROW: 現在の行のみが含まれます。UNBOUNDED FOLLOWING: 最後の行まで拡張します。unsigned_integer FOLLOWING: 現在の行の後にn行終了します。
例:SUM(SALES.AMOUNT_SOLD) OVER (PARTITION BY SALES.CUST_ID ORDER BY SALES.TIME_ID ASC ROWS UNBOUNDED PRECEDING AND CURRENT ROW)