カテゴリ:

クエリ構文

GROUP BY CUBE

GROUP BY CUBE GROUP BY ROLLUP に似た GROUP BY 句の拡張機能です。 GROUP BY ROLLUP のすべての行を生成することに加えて、 GROUP BY CUBE はすべての「クロス集計」行を追加します。小計行は、グループ化された行を生成するために使用されたのと同じ集計関数を計算することによって値が導出される、さらに集計される行です。

CUBE グループ化は一連のグループ化セットと同等であり、本質的にはより短い仕様です。CUBE 仕様の N 要素は 2^N GROUPING SETS に対応しています。

こちらもご参照ください:

GROUP BY GROUPING SETS

構文

SELECT ...
FROM ...
[ ... ]
GROUP BY CUBE ( groupCube [ , groupCube [ , ... ] ] )
[ ... ]

条件:

groupCube ::= { <column_alias> | <position> | <expr> }
列エイリアス

クエリブロックの SELECT リストに表示される列エイリアス。

ポジション

SELECT リスト内の式の位置。

現在のスコープ内のテーブルの式。

使用上の注意

  • Snowflakeでは、各キューブで最大7個の要素(128グループ化セットに相当)を使用できます。

さまざまな都市や州/準州に支店を持つチェーンストアからの販売に関する情報を含むテーブルを作成して読み込むことから始めます。

-- Create some tables and insert some rows.
CREATE TABLE products (product_ID INTEGER, wholesale_price REAL);
INSERT INTO products (product_ID, wholesale_price) VALUES 
    (1, 1.00),
    (2, 2.00);

CREATE TABLE sales (product_ID INTEGER, retail_price REAL, 
    quantity INTEGER, city VARCHAR, state VARCHAR);
INSERT INTO sales (product_id, retail_price, quantity, city, state) VALUES 
    (1, 2.00,  1, 'SF', 'CA'),
    (1, 2.00,  2, 'SJ', 'CA'),
    (2, 5.00,  4, 'SF', 'CA'),
    (2, 5.00,  8, 'SJ', 'CA'),
    (2, 5.00, 16, 'Miami', 'FL'),
    (2, 5.00, 32, 'Orlando', 'FL'),
    (2, 5.00, 64, 'SJ', 'PR');

キューブクエリを実行します。

SELECT state, city, SUM((s.retail_price - p.wholesale_price) * s.quantity) AS profit 
 FROM products AS p, sales AS s
 WHERE s.product_ID = p.product_ID
 GROUP BY CUBE (state, city)
 ;

出力:

SELECT state, city, SUM((s.retail_price - p.wholesale_price) * s.quantity) AS profit 
 FROM products AS p, sales AS s
 WHERE s.product_ID = p.product_ID
 GROUP BY CUBE (state, city)
 ;
+-------+---------+--------+
| STATE | CITY    | PROFIT |
|-------+---------+--------|
| CA    | SF      |     13 |
| CA    | SJ      |     26 |
| FL    | Miami   |     48 |
| FL    | Orlando |     96 |
| PR    | SJ      |    192 |
| CA    | NULL    |     39 |
| FL    | NULL    |    144 |
| PR    | NULL    |    192 |
| NULL  | NULL    |    375 |
| NULL  | SF      |     13 |
| NULL  | SJ      |    218 |
| NULL  | Miami   |     48 |
| NULL  | Orlando |     96 |
+-------+---------+--------+