トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

3-32 Grouping_ID関数

SQLパズル

verifyテーブル
ColA  ColB  ColC  ColD
----  ----  ----  ----
  10    10    20    30
  40    50    60    70
  80    90   100   110
 120   130   140   150

Grouping_ID関数とgrouping関数について考察します


データ作成スクリプト

create table verify(
ColA number(3),
ColB number(3),
ColC number(3),
ColD number(3));

insert into verify values( 10, 10, 20, 30);
insert into verify values( 40, 50, 60, 70);
insert into verify values( 80, 90,100,110);
insert into verify values(120,130,140,150);
commit;


SQL

col  ColA for  9999
col  ColB for  9999
col  ColC for  9999
col  ColD for  9999
col  GID1 for  9999
col  GID2 for  9999
col GColA for 99999
col GColB for 99999
col GColC for 99999
col GColD for 99999

select
ColA,ColB,ColC,ColD,
Grouping_ID(ColA,ColB,ColC,ColD) as GID1,
Bin_To_Num(grouping(ColA),grouping(ColB),grouping(ColC),grouping(ColD)) as GID2,
grouping(ColA) as GColA,
grouping(ColB) as GColB,
grouping(ColC) as GColC,
grouping(ColD) as GColD
  from verify
group by cube(ColA,ColB,ColC,ColD)
order by GID1,ColA,ColB,ColC,ColD;

COLA■COLB■COLC■COLD■GID1■GID2■GCOLA■GCOLB■GCOLC■GCOLD
----■----■----■----■----■----■-----■-----■-----■-----
  10■  10■  20■  30■   0■   0■    0■    0■    0■    0
  40■  50■  60■  70■   0■   0■    0■    0■    0■    0
  80■  90■ 100■ 110■   0■   0■    0■    0■    0■    0
 120■ 130■ 140■ 150■   0■   0■    0■    0■    0■    0
  10■  10■  20■null■   1■   1■    0■    0■    0■    1
  40■  50■  60■null■   1■   1■    0■    0■    0■    1
  80■  90■ 100■null■   1■   1■    0■    0■    0■    1
 120■ 130■ 140■null■   1■   1■    0■    0■    0■    1
  10■  10■null■  30■   2■   2■    0■    0■    1■    0
  40■  50■null■  70■   2■   2■    0■    0■    1■    0
  80■  90■null■ 110■   2■   2■    0■    0■    1■    0
 120■ 130■null■ 150■   2■   2■    0■    0■    1■    0
  10■  10■null■null■   3■   3■    0■    0■    1■    1
  40■  50■null■null■   3■   3■    0■    0■    1■    1
  80■  90■null■null■   3■   3■    0■    0■    1■    1
 120■ 130■null■null■   3■   3■    0■    0■    1■    1
  10■null■  20■  30■   4■   4■    0■    1■    0■    0
  40■null■  60■  70■   4■   4■    0■    1■    0■    0
  80■null■ 100■ 110■   4■   4■    0■    1■    0■    0
 120■null■ 140■ 150■   4■   4■    0■    1■    0■    0
  10■null■  20■null■   5■   5■    0■    1■    0■    1
  40■null■  60■null■   5■   5■    0■    1■    0■    1
  80■null■ 100■null■   5■   5■    0■    1■    0■    1
 120■null■ 140■null■   5■   5■    0■    1■    0■    1
  10■null■null■  30■   6■   6■    0■    1■    1■    0
  40■null■null■  70■   6■   6■    0■    1■    1■    0
  80■null■null■ 110■   6■   6■    0■    1■    1■    0
 120■null■null■ 150■   6■   6■    0■    1■    1■    0
  10■null■null■null■   7■   7■    0■    1■    1■    1
  40■null■null■null■   7■   7■    0■    1■    1■    1
  80■null■null■null■   7■   7■    0■    1■    1■    1
 120■null■null■null■   7■   7■    0■    1■    1■    1
null■  10■  20■  30■   8■   8■    1■    0■    0■    0
null■  50■  60■  70■   8■   8■    1■    0■    0■    0
null■  90■ 100■ 110■   8■   8■    1■    0■    0■    0
null■ 130■ 140■ 150■   8■   8■    1■    0■    0■    0
null■  10■  20■null■   9■   9■    1■    0■    0■    1
null■  50■  60■null■   9■   9■    1■    0■    0■    1
null■  90■ 100■null■   9■   9■    1■    0■    0■    1
null■ 130■ 140■null■   9■   9■    1■    0■    0■    1
null■  10■null■  30■  10■  10■    1■    0■    1■    0
null■  50■null■  70■  10■  10■    1■    0■    1■    0
null■  90■null■ 110■  10■  10■    1■    0■    1■    0
null■ 130■null■ 150■  10■  10■    1■    0■    1■    0
null■  10■null■null■  11■  11■    1■    0■    1■    1
null■  50■null■null■  11■  11■    1■    0■    1■    1
null■  90■null■null■  11■  11■    1■    0■    1■    1
null■ 130■null■null■  11■  11■    1■    0■    1■    1
null■null■  20■  30■  12■  12■    1■    1■    0■    0
null■null■  60■  70■  12■  12■    1■    1■    0■    0
null■null■ 100■ 110■  12■  12■    1■    1■    0■    0
null■null■ 140■ 150■  12■  12■    1■    1■    0■    0
null■null■  20■null■  13■  13■    1■    1■    0■    1
null■null■  60■null■  13■  13■    1■    1■    0■    1
null■null■ 100■null■  13■  13■    1■    1■    0■    1
null■null■ 140■null■  13■  13■    1■    1■    0■    1
null■null■null■  30■  14■  14■    1■    1■    1■    0
null■null■null■  70■  14■  14■    1■    1■    1■    0
null■null■null■ 110■  14■  14■    1■    1■    1■    0
null■null■null■ 150■  14■  14■    1■    1■    1■    0
null■null■null■null■  15■  15■    1■    1■    1■    1


解説

GID1とGID2に注目すると、
Grouping_ID(ColA,ColB,ColC,ColD) = Bin_To_Num(ColA,ColB,ColC,ColD)
が成立していることが分かります。

マニュアル(Grouping_ID関数)(英語)
マニュアル(Grouping_ID関数)