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

5-46 文字の出現回数を求める

SQLパズル

メモテーブル
No  メモ1  メモ2  メモ3
--  -----  -----  -----
 1  abcde  fghij  klmno
 2  01234  56789  abcde
 3  01234  56789  01234

メモテーブルから
メモ1、メモ2、メモ3の数字文字の出現回数の合計を求めて
出現回数の昇順に出力する。

出力結果
No  メモ1  メモ2  メモ3   出現回数
--  -----  -----  -----  --------
 1  abcde  fghij  klmno         0
 2  01234  56789  abcde        10
 3  01234  56789  01234        15


データ作成スクリプト

create Table メモ(
No    number(1),
メモ1 varchar2(5),
メモ2 varchar2(5),
メモ3 varchar2(5));

insert into メモ values(1,'abcde','fghij','klmno');
insert into メモ values(2,'01234','56789','abcde');
insert into メモ values(3,'01234','56789','01234');
commit;


SQL

select No,メモ1,メモ2,メモ3,
nvl2(translate(メモ1 || メモ2 || メモ3,'a0123456789','a'),
Length(メモ1 || メモ2 || メモ3) - Length(translate(メモ1 || メモ2 || メモ3,'a0123456789','a')),
Length(メモ1 || メモ2 || メモ3)) as 出現回数
from メモ
order by 出現回数;


解説

nvl2関数で、全て数字文字かどうかで分岐させてます。

2-1-10 文字列中の指定文字列の数