その他の OLAP の例
例:1 つのクエリ内で複数の集合関数を使用
この例では、1 つのクエリ内で、異なるウィンドウに対して 2 種類の集合関数 を実行しています。
SELECT prod_id, month_num, sales, AVG(sales) OVER (WS1 ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS CAvg, SUM(sales) OVER(WS1 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CSum
FROM sale WHERE rep_id = 1 WINDOW WS1 AS (PARTITION BY prod_id
ORDER BY month_num)
ORDER BY prod_id, month_num;
このクエリの結果セットを次に示します。
prod_id | month_num | sales | CAvg | CSum |
10 | 1 | 100 | 110.00 | 100 |
10 | 2 | 120 | 106.66 | 220 |
10 | 3 | 100 | 116.66 | 320 |
10 | 4 | 130 | 116.66 | 450 |
10 | 5 | 120 | 120.00 | 570 |
10 | 6 | 110 | 115.00 | 680 |
20 | 1 | 20 | 25.00 | 20 |
20 | 2 | 30 | 25.00 | 50 |
20 | 3 | 25 | 28.33 | 75 |
20 | 4 | 30 | 28.66 | 105 |
20 | 5 | 31 | 27.00 | 136 |
20 | 6 | 20 | 25.50 | 156 |
30 | 1 | 10 | 10.50 | 10 |
30 | 2 | 11 | 11.00 | 21 |
30 | 3 | 12 | 8.00 | 33 |
30 | 4 | 1 | 6.50 | 34 |
例:ウィンドウ・フレーム指定の ROWS と RANGE の比較
このクエリでは、ROWS と RANGE を比較しています。ORDER BY 句の指定 により、このデータには重複するローが含まれています。
SELECT prod_id, month_num, sales, SUM(sales) OVER (ws1 RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) AS
Range_sum, SUM(sales) OVER
(ws1 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS Row_sum
FROM sale window ws1 AS (PARTITION BY prod_id ORDER BY month_num)
ORDER BY prod_id, month_num;
このクエリの結果セットを次に示します。
prod_id | month_num | sales | Range_sum | Row_sum |
10 | 1 | 100 | 250 | 100 |
94 | Sybase IQ |