Sybase IQ 12.7 ユーザーズマニュアル
統計関数
72
Sybase IQ
n FOLLOWING の指定には、次のような意味があります。
•
パーティションがデフォルトの昇順
(ASC) でソートされている場合は、n
は正の値として解釈されます。
•
パーティションが降順
(DESC) でソートされている場合は、n は負の値と
して解釈されます。
たとえば、
year カラムに 1999 ~ 2002 の 4 種類の値が含まれているとします。
次のテーブルは、これらの値をデフォルトの昇順でソートした場合
( 左側 ) と
降順でソートした場合
( 右側 ) を示しています。
現在のローが
1999 で、フレームが次のように指定されている場合、このフレー
ムには値
1999 のローと値 1998 のロー ( このテーブルには存在しません ) が含
まれます。
ORDER BY year ASC range BETWEEN CURRENT ROW and 1 FOLLOWING
注意
ORDER BY 値のソート順序は、値ベースのフレームに含まれるローの条
件をテストするときに重要な要素です。フレームに含まれるか除外されるか
は、数値だけでは決まりません。
は、数値だけでは決まりません。
無制限ウィンドウの使用
次のクエリでは、すべての製品と全製品の総数から成
る結果セットが生成されます。
SELECT id, description, quantity,
SUM(quantity) OVER () AS total
FROM product;
隣接ロー間のデルタの計算
現在のローと前のローをそれぞれ
1 つのウィンドウ
として定義し、この
2 つのウィンドウを使用すると、隣接するロー間のデルタ
( つまり差分 ) を直接的に計算することができます。次のクエリ例と結果を確
認してください。
認してください。
SELECT emp_id, emp_lname, SUM(salary) OVER (ORDER BY
birth_date rows between current row and current row)
AS curr, SUM(salary) OVER (ORDER BY birth_date rows
between 1 preceding and 1 preceding) AS prev, (curr
-prev) as delta
AS curr, SUM(salary) OVER (ORDER BY birth_date rows
between 1 preceding and 1 preceding) AS prev, (curr
-prev) as delta
FROM employee WHERE state IN ('MA', 'AZ') AND dept_id
=100
ORDER BY emp_id, emp_lname;