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

10-35 グループごとに最大のデータを取得

SQLパズル

ColA  ColB  ColC
----  ----  ----
   0     0    あ
   0     1    い
   1     0    う
   1     5    え
   2     0    お
   2     1    か
   3     0    き
   4     0    く
   4     2    け
   4     4    こ

ColBが1のデータを出力する。
ただし、ColAの値が同じでColBが1のデータがない場合は、
ColBが0のデータを出力する。

出力結果
ColA  ColB  ColC
----  ----  ----
   0     1    い
   1     0    う
   2     1    か
   3     0    き
   4     0    く

こちらを参考にさせていただきました


データ作成スクリプト

create table test(
ColA number(1),
ColB number(1),
ColC char(2));

insert into test values(0,0,'あ');
insert into test values(0,1,'い');
insert into test values(1,0,'う');
insert into test values(1,5,'え');
insert into test values(2,0,'お');
insert into test values(2,1,'か');
insert into test values(3,0,'き');
insert into test values(4,0,'く');
insert into test values(4,2,'け');
insert into test values(4,4,'こ');
commit;


SQL

select ColA,ColB,ColC
from (select ColA,ColB,ColC,
      max(ColB) over(partition by ColA) as MaxColB
      from test
      where ColB in(0,1))
where ColB=MaxColB;


解説

ColAごとに、ColBが0か1のデータを取得して、
最大のColBであることを条件としてます。