説明
GROUPING_ID 関数は、一連の式の組み合わせ値を計算するために使用されます。この関数は、行が配置されている GROUP BY の階層を表す数値を返します。
GROUPING_ID 関数は、各属性に GROUPING 関数を適用した際に生成される 1 と 0 のシーケンスを結合して、ビットベクトルを作成します。このビットベクトルはバイナリ数として処理され、GROUPING_ID 関数はその後、対応する10進数値を返します。
例えば、CUBE(a, b) をグループ化式として使用する場合、考えられる GROUPING_ID の値は以下のようになります:
集計レベル |
ビットベクトル |
GROUPING_ID |
|---|---|---|
| a, b | 00 | 0 |
| a | 01 | 1 |
| b | 10 | 2 |
| 合計 | 11 | 3 |
使用上の制限と注意事項
- グループセット内に特定の式が含まれる場合、
GROUPING_IDが返す値は増加します。含まれない場合は、値は変更されません。
構文
GROUPING_ID(attributeList)
パラメータ説明
パラメータ |
説明 |
|---|---|
attributeList |
組み合わせ値を計算する式のリスト。 |
使用例
orders テーブルを作成し、注文ID (order_id)、年 (year)、四半期 (quarter)、注文金額 (amount) を含む各種注文データを格納します。
obclient [SYS]> CREATE TABLE orders (
-> order_id INT,
-> year INT,
-> quarter INT,
-> amount DECIMAL(10, 2)
-> );
次に、いくつかのサンプルデータを挿入し、GROUPING_ID を使用してこれらのデータを分析します。
obclient [SYS]> INSERT INTO orders (order_id, year, quarter, amount) VALUES
-> (1, 2021, 1, 1000.00),
-> (2, 2021, 1, 1500.00),
-> (3, 2021, 2, 2000.00),
-> (4, 2021, 2, 2500.00),
-> (5, 2021, 3, 3000.00),
-> (6, 2021, 4, 3500.00),
-> (7, 2021, 4, 4000.00),
-> (8, 2022, 1, 4500.00),
-> (9, 2022, 2, 5000.00),
-> (10, 2022, 3, 5500.00),
-> (11, 2022, 4, 6000.00);
このクエリが生成する結果セットは、異なる年と四半期のすべての可能な集計組み合わせ、および各組み合わせの注文総額を示します。GROUPING_ID は、集計レベルを示す一意の数字を各組み合わせに提供します。
この例では、GROUPING_ID(year, quarter) は以下の値を生成します:
yearとquarterがどちらもNULLでない場合(最も具体的なグループ)、GROUPING_IDの値は 0 です。yearのみがNULLでない場合(年別合計)、GROUPING_IDの値は 1 です。yearとquarterがどちらもNULLの場合(全注文総額)、GROUPING_IDの値は 2 です。
obclient [SYS]> SELECT
-> year,
-> quarter,
-> GROUPING_ID(year, quarter) AS grouping_level,
-> SUM(amount) AS total_amount
-> FROM orders
-> GROUP BY ROLLUP(year, quarter)
-> ORDER BY year, quarter;
実行結果は次のとおりです:
+------+---------+----------------+--------------+
| YEAR | QUARTER | GROUPING_LEVEL | TOTAL_AMOUNT |
+------+---------+----------------+--------------+
| 2021 | 1 | 0 | 2500 |
| 2021 | 2 | 0 | 4500 |
| 2021 | 3 | 0 | 3000 |
| 2021 | 4 | 0 | 7500 |
| 2021 | NULL | 1 | 17500 |
| 2022 | 1 | 0 | 4500 |
| 2022 | 2 | 0 | 5000 |
| 2022 | 3 | 0 | 5500 |
| 2022 | 4 | 0 | 6000 |
| 2022 | NULL | 1 | 21000 |
| NULL | NULL | 3 | 38500 |
+------+---------+----------------+--------------+
11 rows in set