
その他の OLAP の例
例:累積和の計算
このクエリでは、ORDER BY start_date の順序に従って、部署別の給与の累 積和を計算します。
SELECT dept_id, start_date, name, salary, SUM(salary) OVER (PARTITION BY dept_id ORDER BY start_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM emp1
ORDER BY dept_id, start_date;
このクエリの結果セットを次に示します。
dept_id | start_date | name | salary | sum(salary) |
100 | Anna | 18000 | 18000 | |
100 | Mike | 28000 | 46000 | |
100 | Scott | 29000 | 75000 | |
100 | Antonia | 22000 | 97000 | |
100 | Adam | 25000 | 122000 | |
100 | Amy | 18000 | 140000 | |
200 | Jeff | 18000 | 18000 | |
200 | Tim | 29000 | 47000 | |
200 | Jim | 22000 | 69000 | |
200 | Tom | 28000 | 97000 | |
300 | Sandy | 55000 | 55000 | |
300 | Lisa | 38000 | 93000 | |
300 | Peter | 48000 | 141000 |
例:移動平均の計算
このクエリでは、連続する 3 か月間の売上の移動平均を計算します。使用する ウィンドウ・フレームは 3 つのローから成り、先行する 2 つのローと現在の ローが含まれます。このウィンドウは、パーティションの最初から最後までス ライドしていきます。
SELECT prod_id, month_num, sales, AVG(sales) OVER (PARTITION BY prod_id ORDER BY month_num ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM sale WHERE rep_id = 1 ORDER BY prod_id, month_num;
このクエリの結果セットを次に示します。
prod_id | month_num | sales | avg(sales) |
10 | 1 | 100 | 100.00 |
10 | 2 | 120 | 110.00 |
10 | 3 | 100 | 106.66 |
10 | 4 | 130 | 116.66 |
10 | 5 | 120 | 116.66 |
92 | Sybase IQ |