説明
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 |
組み合わせ値を計算する式のリスト。 |
使用例
注文ID(order_id)、年(year)、四半期(quarter)、および注文金額(amount)を含む、さまざまな注文データを格納するためにordersテーブルを作成します。
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