この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回は「関数の確認ドリル」について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
問題023(SQL 関数の確認ドリル)
問題文
- [customers]テーブルから、50歳以上の顧客には名前(name)の末尾に「さま」を、
- そうでない場合には「さん」を付けて、誕生日(birthday)とともにリストにしてください。
- 年齢は、2019年12月31日時点での満年齢とし、誕生日がnullの人は除外します。
- 結果テーブルは、敬称付きの名前(name_with_keisho)と年齢(age)と誕生日(birthday)の3カラムとしてください。
- 正しく敬称がつけられているかどうかを確認するために、名前に「美馬」もしくは「森村」を含む顧客に絞りこんでください。
末尾への追加+条件分岐(concat,if)
- nameの末尾に「さま」または「さん」を付けるのでconcat関数を利用
- 50歳以上の顧客とそれ以外で分けるため、if関数を利用
- なお、このSQLでは誕生日が1970年以降かで判定しているが、後に出てくる「年齢(age)」で判定しても良い
年齢の計算(date_diff)
- 年齢は2019年12月31日時点の満年齢で計算とのことなので、この基準日と誕生の差を年数で取得するためdate_diff関数を利用(以下赤枠)
- また、文字列の基準日をdate型として利用するため、date文を追加(以下青枠)
対象の絞り込み(null,like)
- 誕生日がnullのものは除くとのことなので、where句にてis not nullを利用
- 美馬、森村を含む氏名で絞り込みとのことなので、like句を利用
考察
- SQLについて。基本的なSQL関数について学習完了した。今回は「関数についての確認ドリル」を解いた。(文字列の結合、ifによる条件分岐、日付間の差分取得、特定の文字列を含む対象の絞り込み)
- 考察。疑問について自らデータで確認するのは面白い。たとえば「先進7か国(G7)のGDP推移は?」なら、IMF「世界経済見通しデータベース」を使い、「アメリカは大幅に伸びている(画像1枚目)」や、「日本以外の国は直近20年で2倍近く伸びている(画像2枚目)」などがわかる。
考察のシンプル化と英訳(練習中)
- I feel thinking about my question with database is fun. because it gives me many perspectives.
- (データベースで自分の疑問について考えるのは楽しいと思います。私に多くの視点を与えるからです)
参考書籍(該当箇所)
- 集中演習 SQL入門/木田和廣/株式会社インプレス(SQL確認ドリル)
コメント