第 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 |