SQL問題 佐藤を鈴木に、鈴木を佐藤に変換する

問題:nyumon2_ customer2で佐藤を鈴木に、鈴木を佐藤に変換する。アウトプットは全カラム。1・REPLACEを使う、2・REPLACEを使わないの2つの方法でやってみること。

利用テーブルはnyumon2_customer2 。 使い方はSQL学習用サンプルデータを参照。 .

REPLACEを使う方法:「佐藤を鈴木に変換」→「鈴木を佐藤に変換」だと「佐藤→佐藤」になってしまうのでいったん別の名前に回避しておく。

REPLACEを使わない方法:「変換」という言葉に引っ張られないようにする。佐藤と鈴木を入れ替えてnameというカラム名を付ければ変換したように見える。

解答:

SELECT * EXCEPT(name),
REPLACE( REPLACE ( REPLACE (name ,’鈴木’ ,’aaa’),’佐藤’ ,’鈴木’),’aaa’,’佐藤’) as name

SELECT * EXCEPT (name) ,
CASE WHEN name=’佐藤’ THEN '鈴木’
WHEN name=’鈴木’ THEN '佐藤’
ELSE name END as name
FROM `nyumon2_customer2`

解説:

REPLACEを使う方法:まず「鈴木」を別の言葉に置き換えて (他の名前と被らないようにすること)から佐藤を鈴木に変換し、最後に置き換えた言葉を佐藤に変換する。

REPLACEを使わない方法:佐藤なら鈴木、鈴木なら佐藤、佐藤と鈴木以外は元の値をそのまま使うCASE文を書いている。

元のnameカラムは抽出しないようにEXCEPTを使っているのは共通。もし変換前のデータも併せて表示したい(確認する場合など)場合はname as name_oldとカラム名を変更して抽出すればよい。

数が少ければREPLACEの方がすっきりするが入れ子が多い時はCASEの方が判りやすい。

SQL問題一覧はこちら

2020年1月10日SQL問題

Posted by shinu