第 4 章 OLAP の使用
小計ローの各カラムの値は、次のようになっています。
•プレフィクスに含まれているカラム - そのカラムの値です。たとえば前 述のクエリでは、Year=2000 のローに関する小計ローの Year カラムの値 は 2000 になります。
•プレフィクスから除外されたカラム - NULL です。たとえば、Year カラ ムから成るプレフィクスにより生成された小計ローでは、Quarter カラム の値は NULL になります。
•集合関数 - 除外されているカラムの値を計算した結果です。
小計値は、集計されたローではなく基本データのローに対して計算され ます。多くの場合、たとえば SUM や COUNT などでは結果は等しくなり ますが、AVG、STDDEV、VARIANCE などの統計関数では結果が異なっ てくるため、この区別は重要です。
ROLLUP 演算子には次の制限があります。
•ROLLUP 演算子は、COUNT DISTINCT と SUM DISTINCT を除き、GROUP BY 句で使用可能なすべての集合関数をサポートしています。
•ROLLUP は SELECT 文でのみ使用できます。サブクエリでは ROLLUP を 使用できません。
•1 つの GROUP BY 句の中で複数の ROLLUP、CUBE、および GROUP BY
カラムを組み合わせるグループ化の指定は、現時点ではサポートされてい ません。
•GROUP BY のキーに定数式を指定することはできません。
式の一般的なフォーマットについては、『Sybase IQ リファレンス・マニュア ル』の「式」と「SQL 言語の要素」を参照してください。
ROLLUP 例 2 次は、ROLLUP と GROUPING の使用例です。GROUPING によっ て作成される一連のマスク・カラムを表示します。カラム S、N、C に表示され ている数字 0 と 1 は、GROUPING からの戻り値で ROLLUP の結果の値を表現 しています。マスクが “011” であれば小計のローであり、“111” であれば総計の ローであると特定できます。これを利用して、クエリの結果をプログラムで分 析することが可能です。
SELECT size, name, color, SUM(quantity), GROUPING(size) AS S, GROUPING(name) AS N, GROUPING(color) AS C
FROM product
GROUP BY ROLLUP(size, name, color) HAVING (S=1 or N=1 or C=1) ORDER BY size, name, color;
このクエリの結果セットを次に示します。
size | name | color | SUM | S | N | C |
- | - | - | ||||
(NULL) | (NULL) | (NULL) | 496 | 1 | 1 | 1 |
パフォーマンス&チューニング・ガイド | 51 |