7.24.5 ウィンドウ関数の規則および留意事項
-
ウィンドウ関数は選択式またはORDER BY句に指定できます。ただし,ORDER BY句にウィンドウ関数を指定した場合,ORDER BY句のソートキーに指定した値式と同じ値式を選択式にも指定する必要があります。
-
ウィンドウ関数は1つの問合せ指定中に64個まで指定できます。
-
ウィンドウ関数中にウィンドウ関数,副問合せ,スカラ関数RANDOMROW,ARRAY_AGG集合関数,およびLISTAGG集合関数は指定できません。
-
ウィンドウ関数のRANK,DENSE_RANK,またはROW_NUMBERの実行結果のデータ型はINTEGER型になります。CUME_DISTの実行結果のデータ型はDOUBLE PRECISION型になります。LAGまたはLEADの実行結果のデータ型は,対象データと既定値に指定した値式を結果のデータ型の候補群として,「7.21.2 値式の結果のデータ型」の規則に従って決定されます。ウィンドウ関数として使用する集合関数の実行結果のデータ型については,「7.23 集合関数」の各集合関数の説明を参照してください。
-
ウィンドウ関数は表式の結果(FROM句およびWHERE句の結果)から導出される行の集合に対して適用されます。表式の結果の行がない場合は,ウィンドウ関数は実行されません。
-
ROWとウィンドウ関数は同時に指定できません。
-
GROUP BY句,HAVING句,または集合関数を指定した場合,ウィンドウ関数,およびウィンドウ指定に含まれる集合関数の被集約引数でない位置に指定した列指定には,グループ化列を指定する必要があります。
(例)
SELECT COUNT("C1") OVER(PARTITION BY SUM("C2") ORDER BY "C1" RANGE UNBOUNDED PRECEDING) FROM "T1" GROUP BY "C1"
上記のSQL文の場合,GROUP BY句に指定されているC1列がグループ化列になります。COUNT("C1")および ORDER BY "C1"に指定したC1は,集合関数の被集約引数ではないため,グループ化列を指定する必要があります。一方,SUM("C2")に指定したC2は,集合関数の被集約引数のため,グループ化列を指定する必要はありません。
-
ウィンドウ関数を指定した場合,作業表が作成されることがあります。作業表が作成される作業表用DBエリアの容量が正しく見積もられていない場合,性能低下の原因となることがあります。作業表用DBエリアの容量見積もりについては,マニュアルHADB システム構築・運用ガイドを参照してください。作業表の詳細については,マニュアルHADB AP開発ガイドの作業表が作成されるSQLを実行する際の考慮点を参照してください。