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

5-24 select句でスカラー問い合わせ

SQLパズル

TableA
ID  sex          etc
--  ---  ------------
1     1  小学校の先生
2     2    高校の先生
3     1    中学の先生
4     3         同僚
5     1         上司

TableB
sex   kanji
---  ------
1        男
2        女
3    おかま

TableAの性別の集計を出力する。

出力結果
kanji  人数
-----  ----
男      3
女      1
おかま  1


データ作成スクリプト

create Table TableA(
ID  number(1),
sex number(1),
etc varchar2(12));

create Table TableB(
sex   number(1),
kanji varchar2(6));

insert into TableA(ID,sex,etc) values(1,1,'小学校の先生');
insert into TableA(ID,sex,etc) values(2,2,'高校の先生');
insert into TableA(ID,sex,etc) values(3,1,'中学の先生');
insert into TableA(ID,sex,etc) values(4,3,'同僚');
insert into TableA(ID,sex,etc) values(5,1,'上司');
insert into TableB(sex,kanji) values(1,'男');
insert into TableB(sex,kanji) values(2,'女');
insert into TableB(sex,kanji) values(3,'おかま');
commit;


SQL

select kanji,(select to_multi_byte(count(b.ID)) from TableA b
               where b.sex = a.sex) as 人数
from TableB a
order by kanji;


解説

サブクエリでcount関数を使用して件数を取得し、
to_multi_byte関数で全角に変換してます。