PARTITION BY 句
PARTITION BY 句は、指定した式のユニークな値に基づいて、結果セットを論理グループに構築します。Window 関数を使用してこの句を使用する場合、関数は独立して各パーティションに適用されます。たとえば、カラム名が指定された PARTITION
BY に従う場合、結果セットはカラムの個別の値によってパーティション化されます。
この句を省略すると、全体の結果セットはパーティションとして扱われます。
PARTITION BY expression には、整数リテラルを使用できません。
ORDER BY 句
ORDER BY 句は、結果セットの各パーティションのローをソートする方法を定義します。さらに、昇順の場合は ASC (デフォルト)、降順の場合は DESC を指定して順序を制御することができます。
BETWEEN 句
BETWEEN 句は、現在のローを参照ポイントとして使用して、ウィンドウの最初のローと最後のローを定義するときに使用します。最初のローと最後のローは、それぞれ現在のローの前にあるロー数と後にあるロー数で表します。たとえば、BETWEEN 3 PRECEDING AND 5 FOLLOWING と設定すると、ウィンドウは現在のローの前にある 3 番目のローから開始され、現在のローの後の 5 番目のローで終了します。
BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING は、ウィンドウの最初のローと最後のローを設定することで、それぞれパーティションの最初のローと最後のローにするときに使用します。これは ROW
句や RANGE 句を指定する場合のデフォルト動作と同じです。
FOLLOWING 句
FOLLOWING 句は、現在のローを参照ポイントとして使用して、ウィンドウの最後のローを定義するときに使用します。最後のローは、現在のローの後にあるロー数で表します。
UNBOUNDED FOLLOWING は、ウィンドウの最後のローを設定し、パーティションの最後のローにするときに使用します。
LIST 関数には例外がありますが、すべての集合関数を Window 関数として使用できます。ただし、ランキング集合関数 (RANK、DENSE_RANK、PERCENT_RANK、CUME_DIST、ROW_NUMBER) には ORDER
BY 句が必要です。また、WINDOW 句やインライン定義には ROW 句と RANGE 句は使用できません。それ以外の Window 関数では、任意の句を使用できます。
SELECT EmployeeID, Surname, Salary, State,
AVG( Salary ) OVER Salary_Window
FROM GROUPO.Employees
WINDOW Salary_Window AS ( PARTITION BY State )
ORDER BY State, Surname;