トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
9-19 件数による多分岐
SQLパズル
Registerテーブル
course instructor
------ ----------
10 AAAAAAAAAA
20 BBBBBBBBBB
20 CCCCCCCCCC
30 DDDDDDDDDD
30 EEEEEEEEEE
30 FFFFFFFFFF
40 GGGGGGGGGG
40 HHHHHHHHHH
40 IIIIIIIIII
40 JJJJJJJJJJ
courseごとに以下の形式で出力する。
instructor1には、名前が最小のinstructor
instructor2には、instructorが3人以上なら、more
instructorが2人なら、名前が最大のinstructor
instructorが1人だけなら、null
出力結果
course instructor1 instructor2
------ ----------- -----------
10 AAAAAAAAAA null
20 BBBBBBBBBB CCCCCCCCCC
30 DDDDDDDDDD more
40 GGGGGGGGGG more
SQLパズル(日本語版)のパズル12 [先生] を参考にさせていただきました
SQLパズル 第2版のパズル13 [2人かそれ以上か、それが問題だ] を参考にさせていただきました
データ作成スクリプト
create table Register(
course number(2),
instructor varchar2(10));
insert into Register values(10,'AAAAAAAAAA');
insert into Register values(20,'BBBBBBBBBB');
insert into Register values(20,'CCCCCCCCCC');
insert into Register values(30,'DDDDDDDDDD');
insert into Register values(30,'EEEEEEEEEE');
insert into Register values(30,'FFFFFFFFFF');
insert into Register values(40,'GGGGGGGGGG');
insert into Register values(40,'HHHHHHHHHH');
insert into Register values(40,'IIIIIIIIII');
insert into Register values(40,'JJJJJJJJJJ');
commit;
SQL
select course,min(instructor) as instructor1,
case count(*) when 1 then null
when 2 then max(instructor)
else 'more' end as instructor2
from Register
group by course
order by course;
解説
単純case式で多分岐させてます