Sybase 12.7 Home Theater System User Manual


 
その他の OLAP の例
90 Sybase IQ
このクエリの結果セットを次に示します。
ID description quantity ship_date sum quantity
--- ----------- -------- --------- ------------
302 Crew Neck 60 2001-07-02 60
400 Cotton Cap 60 2001-05-26 60
400 Cotton Cap 48 2001-07-05 108
401 Wool cap 48 2001-06-02 48
401 Wool cap 60 2001-06-30 108
401 Wool cap 48 2001-07-09 156
500 Cloth Visor 48 2001-06-21 48
501 Plastic Visor 60 2001-05-03 60
501 Plastic Visor 48 2001-05-18 108
501 Plastic Visor 48 2001-05-25 156
501 Plastic Visor 60 2001-07-07 216
601 Zipped Sweatshirt 60 2001-07-19 60
700 Cotton Shorts 72 2001-05-18 72
700 Cotton Shorts 48 2001-05-31 120
この例では、2 つのテーブルのジョインとクエリの WHERE 句を適用した後
に、SUM ウィンドウ関数の計算が行われます。このクエリではインラインの
ウィンドウ指定を使用しており、このウィンドウ指定によって、ジョインから
の入力ローが次のように処理されています。
1 prod_id 属性の値に基づいて入力ローがパーティション ( グループ ) に分
けられます。
2 各パーティション内で、ローが ship_date 属性に基づいてソートされます。
3 パーティション内の各ローの quantity 属性について、SUM() 関数が評価さ
れます。その際に、ソート後の各パーティションの最初のローから現在の
ローまでを含む移動ウィンドウ ( 現在のローも含む ) が使用されます。詳
細については、4-3 (66 ページ ) を参照してください。
このクエリを別の方法で記述するには、関数の外でウィンドウを定義し、その
ウィンドウを関数呼び出しから参照します。この方法は、同じウィンドウに基
づくウィンドウ関数を複数指定する場合に便利です。このウィンドウ関数を使
用するクエリを、独立したウィンドウ句を使用する方法で記述すると次のよう
になります (cumulative というウィンドウを宣言しています )
SELECT p.id, p.description, s.quantity, s.ship_date,
SUM(s.quantity) OVER(cumulative
ROWS BETWEEN UNBOUNDED PRECEDING
and CURRENT ROW
) AS cumulative qty
FROM sales_order_items s JOIN product p On (s.prod_id =
p.id)
WHERE s.ship_date BETWEEN ‘2005-07-01’ and ‘2005-08-31’
Window cumulative as (PARTITION BY s.prod_id ORDER BY
s.ship date)
ORDER BY p.id