Sybase 12.7 用户手册

下载
页码 212
 1 章    データベース・テーブルからのデータの選択
パフォーマンス&チューニング・ガイド
13
WHERE と GROUP BY 
の使用
注文数が
 55 を超えており、ID が 1000 より大きいすべての営業担当者をリス
トするには、次のコマンドを入力します。
SELECT sales_rep, count( * )
FROM sales_order
WHERE sales_rep > 1000 
GROUP BY sales_rep
HAVING count( * ) > 55
Sybase IQ クエリ・オプティマイザは、それによってパフォーマンスが向上す
る場合、述部を
 HAVING 句から WHERE 句に移動します。たとえば、上記の
例で
 WHERE 句の代わりに述部を次のように指定した場合、クエリ・オプティ
マイザは述部を
 WHERE 句に移動します。
GROUP BY sales_rep 
HAVING count( *) > 55
 AND sales_rep > 1000
Sybase IQ は、この最適化を (OR や IN を伴わない ) 単純な条件を使って実行し
ます。このため、
WHERE 句と HAVING 句の両方を含むクエリを構築するとき
は、できるだけ多くの条件を
 WHERE 句で指定するようにします。
小計計算の活用
日付や場所などの次元によって異なるデータがある場合に、各次元でデータが
どのように異なるかを調べることが必要になる場合があります。
ROLLUP 演
算子と
 CUBE 演算子を使用すると、グループ化カラムへの参照のリストから
複数レベルの小計と総計を作成できます。小計は、最も詳細なレベルから総計
まで「ロールアップ」します。たとえば、販売データを分析している場合は、
同じクエリを使用して全体の平均と年別の平均販売数を計算できます。
ROLLUP の使用
年別、モデル別、色別の合計自動車販売数を選択するには、次のコマンドを使
用します。
SELECT year, model, color, sum(sales) 
FROM sales_tab
GROUP BY ROLLUP (year, model, color);
year
model
color
sales
1990
Chevrolet
red
5
1990
Chevrolet
white
87
1990
Chevrolet
blue
62
1990
Chevrolet
NULL
154
1990
Ford
blue
64
1990
Ford
red
62
1990
Ford
white
63
1990
Ford
NULL
189
1990
NULL
NULL
343