第 4 章 OLAP の使用
このような範囲指定は内包的です。現在のローの year 値が 2000 である場合は、 ウィンドウ・パーティション内で、year 値が 2000 および 1999 であるすべての ローがこのフレームに含まれることになります。パーティション内での各ロー の物理的な位置は問われません。値ベースのフレームでは、ローを含めたり 除外したりする規則が、ローベースのフレームの規則とは大きく異なります ( ローベースのフレームの規則は、ローの物理的なシーケンスに完全に依存し ています )。
OLAP の AVG() 関数の例で考えてみます。次の部分的な結果セットは、値ベー スのウィンドウ・フレームの概念を具体的に表しています。前述のように、こ のフレームには次のローが含まれます。
•現在のローと同じ year 値を持つロー
•現在のローから 1 を減算したのと同じ year 値を持つロー
次のクエリは、範囲ベースのウィンドウ・フレーム定義の例を示しています。
SELECT dimension, year, measure, AVG(measure) OVER(PARTITION BY dimension
ORDER BY year ASC
range BETWEEN CURRENT ROW and 1 PRECEDING) as olap_avg
FROM ...
平均値は次のようにして計算されています。
•ロー [1] = 1999 のため、ロー [2] ~ [5] は除外。したがって AVG = 10,000/1
•ロー [2] = 2001 のため、ロー [1]、[4]、[5] は除外。したがって AVG = 6,000/2
•ロー [3] = 2001 のため、ロー [1]、[4]、[5] は除外。したがって AVG = 6,000/2
•ロー [4] = 2002 のため、ロー [1] は除外。したがって AVG = 21,000/4
•ロー [5] = 2002 のため、ロー [1] は除外。したがって AVG = 21,000/4
値ベースのフレームの昇順と降順 値ベースのウィンドウ・フレームを使用する OLAP 関数の ORDER BY 句では、範囲指定の対象となる数値カラムを特定す るだけではなく、ORDER BY 値のソート順序も宣言できます。次の指定によ り、直前の部分のソート順序 (ASC または DESC) を設定できます。
RANGE BETWEEN CURRENT ROW AND n FOLLOWING
パフォーマンス&チューニング・ガイド | 71 |