はじめに
あじ太郎は情報処理試験の問題を解くだけではあきたらず、実際にやってみようと思いました。
今回は、データベーススペシャリスト試験から 2024年 午前2 問7 の問題に取り組みます。
なお、実際に取り組んでみたら MySQL で日本語のテーブル名、カラム名にしたらどうなる?みたいな記事になりました。
データベーススペシャリスト 2024年 午前2 問7 の内容
出典:IPAのホームページ
https://www.ipa.go.jp/shiken/mondai-kaiotu/2024r06.html
(データベーススペシャリストの過去問題のPDFから該当部分をキャプチャしました)
この問題、正直なところ SQL が簡単というか勘で回答できそうな難易度に設定されていると思いますが、実際にデータベースにテーブルを作って SQL を実行してみました。
MySQL と phpMyAdmin の Docker サンプル
以下にアップしました。
https://github.com/aji-taro/db_2024_am2_no7
※Dockerで MySQL を起動して、
SQL を phpMyAdmin で試すことができますよ。
使い方は付属の README.md を参照してください。
試験問題のテーブルを再現する上で一番の課題は、テーブル名やカラム名が日本語になっている点だと思ってはいたのですが、やはりすんなりできませんでした。
以下は最初に書いた SQL
CREATE TABLE 商品 (
商品コード VARCHAR(10) PRIMARY KEY,
商品名 VARCHAR(10),
商品ランク VARCHAR(10)
);
MySQL の Docker コンテナを起動させようとしたら、、
エラー発生、ダメみたいね。
さて、どうするか🤔
テーブル名やカラム名をバッククォート`
で囲ったら、どうかしら?(以下)
CREATE TABLE `商品` (
`商品コード` VARCHAR(10) PRIMARY KEY,
`商品名` VARCHAR(10),
`商品ランク` VARCHAR(10)
);
結果
エラーにはならなかったけど、テーブル名やカラム名が化けている。
文字コードを指定してみるか?
ということでcharacter_set_client
を指定。(以下)
set character_set_client=utf8mb4;
CREATE TABLE `商品` (
`商品コード` VARCHAR(10) PRIMARY KEY,
`商品名` VARCHAR(10),
`商品ランク` VARCHAR(10)
);
SQL文の結果は!?
テーブルができたので、問題に記載されている下記のSQLを実行します。
SELECT AVG(売上合計金額) AS 売上平均金額
FROM 商品 LEFT OUTER JOIN 商品別売上実績
ON 商品.商品コード = 商品別売上実績.商品コード
WHERE 商品ランク = 'A'
以下、結果
解答例イ
の 150 に一致、やったー🙌🙌
MySQL だと小数点以下が表示されるけど、そこはご愛敬。
取り組んでみて
業務ではテーブル名やカラム名を日本語の全角文字にしたことはなく、今後もすることはないと思うので、日本語にしてみて少し楽しかったあじ太郎なのでした。