問題
1CASE演算子を使ってみよう!
CASE 演算子は、列の値や条件式を評価して、その結果に応じて任意の値に変換することができます。 少し複雑な書き方にはなりますが、意味が理解出来ればさほど難しくありません。
SQLの問題に挑戦しよう!
問題
「CASE演算子を使ってみよう!」
CASE文を使って家計簿テーブルの費目を「固定費」と「変動費」に振り分けましょう。
給料に関しては「その他」にしましょう。
期待する画面を参考に作成してください。
※初級問題を実施していない場合ははじめに指定のコードを実行し
2つのテーブルを作成しましょう。
あらかじめエディタに書くコード
USE ninjacode;
-- 家計簿テーブルの作成
CREATE TABLE 家計簿 (日付 INT, 費目 VARCHAR(20), 収入 INT, 支出 INT, 詳細 VARCHAR(255));
INSERT INTO 家計簿
(日付, 費目, 収入, 支出, 詳細)
VALUES
(20221205, '家賃', 0, 80000, '10月の家賃'),
(20221205, '光熱費', 0, 10000, '10月の電気代'),
(20221210, '交際費', 0, 6000, '会社の飲み会'),
(20221216, '食費', 0, 1400, 'ランチ'),
(20221224, '娯楽費', 0, 8000, 'テーマパークへ行った'),
(20221225, '給料', 250000, 0, '11月の給料'),
(20221226, '食費', 0, 400, 'コーヒー購入'),
(20221227, '娯楽費', 0, 15000, '温泉旅行'),
(20221228, '娯楽費', 0, 1400, '書籍購入');
-- 家計簿_過去分テーブルの作成
CREATE TABLE 家計簿_過去分 (日付 INT, 費目 VARCHAR(20), 収入 INT, 支出 INT, 詳細 VARCHAR(255));
INSERT INTO 家計簿_過去分
(日付, 費目, 収入, 支出, 詳細)
VALUES
(20221105, '家賃', 0, 80000, '9月の家賃'),
(20221105, '光熱費', 0, 15000, '9月の電気代'),
(20221108, '食費', 0, 1000, 'ランチ'),
(20221115, '食費', 0, 1400, 'ランチ'),
(20221120, '交際費', 0, 25000, '友人と温泉旅行'),
(20221122, '娯楽費', 0, 1400, '書籍購入'),
(20221125, '給料', 250000, 0, '10月分');
-- 各テーブルの確認
-- SELECT * FROM 家計簿_過去分;
-- SELECT * FROM 家計簿;
¥SQL¥
期待する画面
解答と解説(CASE演算子を使ってみよう!)
解説
※ご登録後トークルーム下部にあるメニュー内
「無料問題集※解答付き」を押すと
解答閲覧用URLが届きます
今回の問題では、CASE文を使って条件分岐を記述していきます。
構文は以下のようになり、CASEからENDまでが1つの選択列となります。
CASE 評価する列や式
WHEN 値1 THEN 値1の場合に返す値
WHEN 値2 THEN 値2の場合に返す値
ELSE それ以外の値
END
今回は家賃と給料のみが変動費と異なる値になるので、
ELSEに「変動費」を設定し、WHENで「固定費」と「その他」を指定します。
CASEによって割り当てられる値の列名はASを使って「費用の種類」としましょう。
補足
CASE文の構文には2通りあり、もう1つは以下のようなものです。
CASE
WHEN 条件1 THEN 条件1の場合に返す値
WHEN 条件2 THEN 条件2の場合に返す値
ELSE デフォルト値
END
解答の構文とは違ってCASEの後ろに列名や式を記述しません。
その代わりWHENの後ろには値ではなく、条件式を記述します。
CASE文を指定する際は2通りあることを覚えておきましょう。