目的
データを複数の次元にグループ分けして分析します。
構文
構文要素
- ordinary_grouping_set
- 複数の次元にまたがるキューブ状のレポート行をグループ分けするのに使う1つまたは複数の式。
ANSI準拠
CUBEは、ANSI SQL:2011に準拠しています。
CUBEのルールと制限
GROUP BY句にCUBEオプションが指定されている問合わせにSAMPLE句を指定することはできません。ただし、そのGROUP BY句のCUBEオプションが派生テーブルまたはビューの中に出現し、SAMPLE句が外問合わせの中に出現する場合を除きます。
CUBEがデータを要約する方法
n個の次元がある場合、CUBEは2n個の異なる種類のグループを生成します。Teradata Databaseでは、各グループを単一の行としてレポートします。
例えば、2個の次元がある場合、CUBEは次のように4個のグループを生成します。
グループ番号 | 次元1 | 次元2 |
---|---|---|
1 | X | X |
2 | X | |
3 | X | |
4 |
3個の次元がある場合、CUBEは次のように8個のグループを生成します。
グループ番号 | 次元1 | 次元2 | 次元3 |
---|---|---|---|
1 | X | X | X |
2 | X | X | |
3 | X | X | |
4 | X | ||
5 | X | X | |
6 | X | ||
7 | X | ||
8 |
例: CUBEグループ化
次のsales_viewテーブル データがあると仮定します。
sales_view | ||||||
---|---|---|---|---|---|---|
PID | cost | sale | margin | state | county | city |
1 | 38350 | 50150 | 11800 | CA | Los Angeles | Long Beach |
1 | 63375 | 82875 | 19500 | CA | San Diego | San Diego |
1 | 46800 | 61200 | 14400 | CA | Los Angeles | Avalon |
1 | 40625 | 53125 | 12500 | CA | Los Angeles | Long Beach |
2 | 20000 | 24750 | 4750 | CA | Los Angeles | Long Beach |
2 | 4800 | 5940 | 1140 | CA | San Diego | Santee |
1 | 57600 | 71280 | 13680 | CA | San Diego | San Diego |
売上(sale)についてcountyとPIDの効果を調べてみましょう。
次のSELECT文は、GROUP BY句でCUBEを使用して、売上(sale)に対するcountyおよびPIDの効果を分析します。
SELECT pid, county, SUM(sale) FROM sales_view GROUP BY CUBE (pid,county);
問合わせで以下のデータが報告されます。疑問符(?)はnullを示します。
PID |
County |
Sum(sale) |
--- |
------ |
--------- |
2 |
Los Angeles |
24750 |
1 |
Los Angeles |
164475 |
2 |
San Diego |
5940 |
1 |
San Diego |
154155 |
2 |
? |
30690 |
1 |
? |
381630 |
? |
Los Angeles |
189225 |
? |
San Diego |
160095 |
? |
? |
349320 |
この問合わせでは、countyとPIDの次元にまたがって、次の4つの異なるレベルのグループを計算します。
- countyおよびPIDごと(グループ1~4)。
- PIDのみ(グループ5と6)。
- countyのみ(グループ7と8)。
- 何もなし(グループ9)。すべてのCountyおよびPIDにわたって売上高(sale)を集約します。
nullは、欠落した情報ではなく空のセットを表わすのに使用されています。Nullは、示されているグループ分けレベルでレポートされない情報を意味しており、sales_view基本テーブルから欠落している情報を意味するわけではありません。