すべてのプロダクト
Search
ドキュメントセンター

PolarDB:GROUP_ID

最終更新日:Mar 29, 2026

GROUP_ID() 関数は、GROUP BY の拡張機能(例:ROLLUP、CUBE、GROUPING SETS)によって生成された各重複グループにシーケンス番号を割り当てます。複雑な集約クエリにおいて、重複するグループ化を特定し、フィルター処理するために使用します。

説明

GROUP BY 拡張は、単一の結果セット内に重複するグループを生成する可能性があります。GROUP_ID() は、重複するグループの各発生に 0 から始まる番号を付ける整数を返します。グループが *n* 回出現する場合、その各発生には 0 から n-1 までの値が割り当てられます。

GROUP_ID() は、SELECT 文のうち、GROUP BY 句を含むものにのみ適用されます。

出現順GROUP_ID の値
最初0
2 回目1
3 回目2

使用例

以下のテーブルを使用した例を示します。

 a | b | c
---+---+---
 1 | 2 | 3

重複グループがない場合

GROUP BY ROLLUP(a, b, c) は、(a, b, c)(a, b)(a)() の 4 つの異なるグループを生成します。重複は存在しないため、すべての行で GROUP_ID() の値は 0 になります。

SELECT a, b, c, grouping(a, b, c), group_id()
FROM t
GROUP BY ROLLUP(a, b, c)
ORDER BY grouping(a, b, c);

実行結果:

 a | b | c | grouping | group_id
---+---+---+----------+----------
 1 | 2 | 3 |        0 |        0
 1 | 2 |   |        1 |        0
 1 |   |   |        3 |        0
   |   |   |        7 |        0
(4 rows)

重複グループがある場合

GROUP BY ROLLUP(a, b, c), a, b は同様に 4 行を生成しますが、a, bGROUP BY 句に追加することで、(a, b) グループが 3 回出現します。GROUP_ID() はこの重複を 012 の順に番号付けします。

SELECT a, b, c, grouping(a, b, c), group_id()
FROM t
GROUP BY ROLLUP(a, b, c), a, b
ORDER BY grouping(a, b, c);

実行結果:

 a | b | c | grouping | group_id
---+---+---+----------+----------
 1 | 2 | 3 |        0 |        0
 1 | 2 |   |        1 |        0
 1 | 2 |   |        1 |        1
 1 | 2 |   |        1 |        2
(4 rows)