小計計算の活用

1 章 データベース・テーブルからのデータの選択

WHERE GROUP BY

の使用

小計計算の活用

ROLLUP の使用

注文数が 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 演算子を使用すると、グループ化カラムへの参照のリストから 複数レベルの小計と総計を作成できます。小計は、最も詳細なレベルから総計 まで「ロールアップ」します。たとえば、販売データを分析している場合は、 同じクエリを使用して全体の平均と年別の平均販売数を計算できます。

年別、モデル別、色別の合計自動車販売数を選択するには、次のコマンドを使 用します。

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

 

 

 

 

パフォーマンス&チューニング・ガイド

13

Page 29
Image 29
Sybase 12.7 manual 小計計算の活用, パフォーマンス&チューニング・ガイド