リファレンスガイド> SQL関数のTDVサポート> 分析関数> window句
 
window句
12以上の分析関数が、ORDER BYの一部としてwindow句を受け付けます。この機能は、これらの関数を説明するセクションに記載されています。COUNTは、window句がどのように機能するかを説明するために使用されています。
window句の構文は次のとおりです。
{ {ROWS | RANGE}
{ {BETWEEN {UNBOUNDED PRECEDING | CURRENT ROW | value_expr {PRECEDING | FOLLOWING} }
AND {UNBOUNDED FOLLOWING | CURRENT ROW | value_expr {PRECEDING | FOLLOWING} }
|
{UNBOUNDED PRECEDING | CURRENT ROW | value_expr PRECEDING} }
}
 
次のセクションでは、window句の詳細について説明します。
デフォルトの想定
RANGEと現在の行
論理オフセットとしてのRANGE
行と現在の行
行とフレームの最大サイズ
AVG
デフォルトの想定
RANGE UNBOUNDED PRECEDINGは、ORDER BYが存在するがwindow句が指定されていない場合、デフォルトで想定されます。たとえば、次の3つは同等です。
COUNT(*) OVER (ORDER BY hire_date)
COUNT(*) OVER (ORDER BY hire_date RANGE UNBOUNDED PRECEDING)
COUNT(*) OVER (ORDER BY hire_date RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
 
同様に、ROWSを含む次の2つのCOUNT関数は同等です。
COUNT(*) OVER (ORDER BY hire_date ROWS 1 PRECEDING)
COUNT(*) OVER (ORDER BY hire_date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
RANGEと現在の行
以下のCOUNTの例では、ウィンドウフレームに現在の行、その前のすべての行、およびすべてのタイが含まれています。最初の3人の従業員が同じ日に雇用された場合、返されるカウントは3になります。
COUNT(*) OVER (ORDER BY hire_date RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
 
同様に、現在の行が採用日で並べ替えられて2番目と3番目の従業員に移動した場合、ウィンドウフレームには引き続き3つの行が含まれるため、どちらの場合も関数の結果は3になります。
現在の行が進むにつれて、結果のカウントは引き続き従業員数を追跡しますが、別の雇用日タイが発生した場合(たとえば、9番目と10番目の従業員)、結果のカウントは両方とも10になります。
論理オフセットとしてのRANGE
RANGEは論理オフセットであるため、次の2つの関数は同等です。フレームには、採用日から3日以内の行が含まれています。
COUNT(*) OVER (ORDER BY hire_date RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING)
COUNT(*) OVER (ORDER BY hire_date RANGE BETWEEN INTERVAL ‘3’ days PRECEDING AND INTERVAL ‘3’ days FOLLOWING)
 
「間隔」構文では、単位の範囲(たとえば、年)を拡張でき、行数を超えるフレームサイズの基準が追加されます。
行と現在の行
RANGEの代わりにROWSが指定されている場合、COUNTはROW_NUMBERと同じように動作します。つまり、ROWSは現在の行のオフセットのみを処理します。このようなCOUNTの例は次のとおりです。
COUNT(*) OVER (ORDER BY hire_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
行とフレームの最大サイズ
フレームサイズを制限するCOUNT関数の例は次のとおりです。
COUNT(*) OVER (ORDER BY hire_date ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING)
 
現在の行が最初の従業員の場合、フレームサイズは4です(現在の行に3を加えたもの)。現在の行がテーブル内を移動すると、フレームサイズは7に拡大できます。現在の行がテーブルの最後に近づくと、フレームサイズは4に戻ります。ROWSでは、タイはフレームサイズに影響を与えません。結果のカウント。
ROWSはデータセットの外側を指し、ゼロの結果を返すことができます。たとえば、フレームが空であるため、現在の行がテーブルの最初の行である場合、次の関数は0を返します。
COUNT(*) OVER (ORDER BY hire_date ROWS BETWEEN 3 PRECEDING AND 1 PRECEDING)
 
注:この例では、現在の行がゼロ以外のカウントを返すのに十分な距離にある場合でも、すべての行が現在の行の前にあるため、現在の行は含まれません。