GROUPING_ID
構文
目的
GROUPING_ID
は、行に関連するGROUPING
ビット・ベクトルに対応する数値を戻します。GROUPING_ID
は、ROLLUP
やCUBE
など、GROUP
BY
の拡張機能およびGROUPING
ファンクションを含むSELECT
文にのみ適用できます。多くのGROUP
BY
式を含む問合せでは、多くのGROUPING
ファンクションを必要とする特定の行のGROUP
BY
レベルを指定するため、非常に複雑なSQLになります。GROUPING_ID
は、このような場合に有効です。
GROUPING_ID
は、複数のGROUPING
ファンクションの結果をビット・ベクトル(1と0を組み合せた文字列)に連結したものと同じです。GROUPING_ID
を使用すると、複数のGROUPING
ファンクションを使用する必要がなくなり、行のフィルタ条件の表記が簡単になります。GROUPING_ID
を使用すると、要求する行が単一の条件(GROUPING_ID
= n
)によって識別されるため、行のフィルタ処理が簡単になります。このファンクションは、1つの表に複数のレベルの集計を格納する場合に、特に有効です。
例
次の例では、サンプル表sh.sales
の問合せからグループ化IDを抽出する方法を示します。
SELECT channel_id, promo_id, sum(amount_sold) s_sales, GROUPING(channel_id) gc, GROUPING(promo_id) gp, GROUPING_ID(channel_id, promo_id) gcp, GROUPING_ID(promo_id, channel_id) gpc FROM sales WHERE promo_id > 496 GROUP BY CUBE(channel_id, promo_id) ORDER BY channel_id, promo_id, s_sales, gc; CHANNEL_ID PROMO_ID S_SALES GC GP GCP GPC ---------- ---------- ---------- ---------- ---------- ---------- ---------- 2 999 25797563.2 0 0 0 0 2 25797563.2 0 1 1 2 3 999 55336945.1 0 0 0 0 3 55336945.1 0 1 1 2 4 999 13370012.5 0 0 0 0 4 13370012.5 0 1 1 2 999 94504520.8 1 0 2 1 94504520.8 1 1 3 3