この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回はSQLによる仮想テーブルの作成(復習・確認ドリル)について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
確認ドリル 問題011
前回振り返り
- SQLについて。今までは「実態のあるテーブル」の操作(列、行、グループ化、複数テーブルの結合と集合演算)を想定してきたが、現在は「仮想テーブル」を扱う操作を学んでいる。前回は「with句」「ビュー」について学んだ。
- 今回は復習として確認ドリルを行う。
問題文
- [sales]テーブルと[products]テーブルを結合して、
- カテゴリ(product_category)別の販売金額(revenue)を合計を集計し、
- 金額の大きい順に並べてください。
SQLの実践1
- まず、2つのテーブルを単純に結合するSQLは以下
SQLの実践2,3
- 次に、「カテゴリ(product_category)」で束ねて、販売金額(revenue)を合計する。
- 最後に、合計の高い順に並び替える。結果は以下。
- 問題をいくつかに分け、基本的な技法を、確実に積み上げて(都度反応を見ながら)ゴールに向かう。
確認ドリル 問題012
問題文
- [sales]テーブルから、商品ID(product_id)別の、販売個数の合計と
- その合計がテーブル全体の販売個数の何%になっているかの割合(sales_share)を調べてください。(sales_share)は少数で構いません。
- 結果テーブルは商品ID(product_id)、販売個数の合計(sum_qty)、販売個数の割合(sales_share)の3カラムとし、(sales_share)の高い順に5レコードに絞り込んでください。
SQLの実践1
- 上記の問題文1について、細かく分解し順に積み上げる。
- まず、「[sales]テーブルから」とあるので「from sample.sales」と記述。
- 次に、「商品ID(product_id)別の」とあるので「group by product_id」とし、
- 最後に、「販売個数の合計」とあるので「select product_id,sum(qty)」となる。
SQLの実践2
- 上記の問題文2について、細かく分解し順に積み上げる。
- まず、「その(product_idごとの)合計が、テーブル全体の販売個数の何%になっているかの割合」を計算したいとある。
- これは「テーブル全体の販売個数」をまず求めてsalesテーブルに結合し、そのあとそのテーブル内で割合を求めるという風に2回のSQLに分けることもできる。
- ただ、今回は仮想テーブルの復習なので、これを1回のSQLで解くことを考える。
- 具体的にはwith句の活用。「テーブル全体の販売個数」を求めるためのSQL「select sum(quantity) from sample.sales」をwith句を用いて仮想テーブルに保管する。
- 次に、「何%になっているかの割合」を求めるため、仮想テーブルの情報をcross joinの総当たりでsalesテーブルにつなげ、product_idでグループ化して一旦テーブルを表示することを試みる。
- ところが、ここでエラーになってしまった。
- エラーメッセージをgoogle翻訳で要約すると「select句は、グループ化も集約もされていないtotal_aを参照してます」とある。
- どういうことか。私はgroup句を「軸を定めて束ねる操作」と認識していた。
- これは間違っていないのだが、もう一つ。group句は「そのうえで集約関数を指定して使う」ものということ。(詳細は過去記事参照)
- つまりこの場合は、「total_a」と列そのまま参照するのでなく、「max(total_a)」と集約関数を用いれば解決する。
SQLの実践3
- ここまでできれば、あともう一息。
- 割合を調べて、各列に指定された名前をつけ、並び替えて、limitで対象を絞るのみ。
- 具体的には以下のとおり。
考察
- SQLについて。今までは「実態のあるテーブル」の操作(列、行、グループ化、複数テーブルの結合と集合演算)を想定してきたが、現在は「仮想テーブル」を扱う操作を学んでいる。今回は復習としての確認ドリルを解いた。
- 考察。SQLの読解や記述は一見難しい。しかし、問題を小さく分割し、簡単なものから取り組み、誤りをつど解消し、積み上げることで正解に導ける。私はこの数学的プロセスをとても楽しく感じている。好きなことは継続できるので、この感覚は大事にしていきたい。
抽象化×英語学習×AI,IT活用
取り組み概要
- 目的は、「IT,AIを実際に使いこなし」かつ「英語を学び、視野を広げる」こと。それにより選択肢を増やし、自分と家族を守ること。
- ポイントは、学びを楽に、楽しく、続けられる工夫をすること。抽象化で本質を学び、Google翻訳でスピーディなインプットとアウトプットを実現し、ブログの1文のみと低いハードルで習慣化する。
- 詳細は別の記事に整理。
(実践①)日本語のプリエディット
- 基本。日本語は特殊なので直訳困難。下準備(加工)が必要。
- コツ1:文は短くシンプルに。長い文は区切る。敬語は使わない。
- コツ2:省略は避けてハッキリと。『誰が・誰の・何を・いつ』を補う。『略語・略称・比喩表現』は使わない。
- コツ3:翻訳しやすい表記に。ひらがなより漢字(例:あめ⇒雨)。漢数字よりアラビア数字(例:百⇒100。数え方は個で統一。特殊記号は使わない。
- 原文例。「SQLの読解や記述は一見難しい。しかし、問題を小さく分割し、簡単なものから取り組み、誤りをつど解消し、積み上げることで正解に導ける。私はこの数学的プロセスをとても楽しく感じている。好きなことは継続できるので、この感覚は大事にしていきたい。」
- プリエディット例。一旦そのままの表記にする。
(実践②)自力での英訳
- 基本。プリエディットをもう1歩進めて「日本語を並び替える」と、自力の英訳が可能になる。
- コツ1:短文の連続にする(意味が伝われば良い)。
- コツ2:語順の”型”は絞る。具体的には基本の3つ。「A=B(例:I am happy)」「主+動+A=B(例:I feel you happy)」「主+動+A+B(例:I give you present)」
- コツ3:使う単語も絞る。日本語側の表現を変えれば手持ちの単語で対応できる。さらに単語を増やす工夫を使う。「in・un・disをつけて反対の意味(例:unhappy)」「動詞にing・edをつけて形容詞を作る(例:exciting)」「前置詞+名詞で形容詞を作る(例:on business trip)」
- 日本語の並び替え例(カッコ内は用いた”型”)。「SQLの読み書きは、見える、難しく。」「しかし、私は、変える、それを、小さくかつシンプルに」「そして、私は、発見する、答えを、少しづづ」「私は、感じる、このプロセスを、楽しい、かつ、大事だと」
- 自力で英訳。「SQL reading and writing seems difficult. 」「but, I turn it small and simple.」「and then, I find answer as a little. 」「I fell this process fun and important. 」
(実践③)Google翻訳での添削
- Google翻訳での和訳のコツ。「長い文は区切る」「コンマや5つの接続詞(before,after,but,when,if)前で区切る」「英文の文末にはピリオドとスペースを入れる」
- Google翻訳で「自力の英訳」を和訳。「SQLの読み取りと書き込みは難しいようです」「しかし、私はそれを小さくて単純にします」「そして、私は少し答えを見つけます。」「私はこのプロセスを楽しく重要なものにしました。」
- 振り返り(意図した意味になっているか)。全体的に少しニュアンスが異なる。もう少し日本語をシンプルに入れ替えたい。
(実践④)google翻訳との対比
- 次に、実践①でプリエディットした日本語をGoogle翻訳で英訳する。
- Reading and writing SQL is seemingly difficult.
- However, you can lead to the correct answer by dividing the problem into smaller pieces, working from the simplest ones, eliminating each mistake, and accumulating them.
- I find this mathematical process very enjoyable.
- I can continue to do what I like, so I want to cherish this feeling.
- 振り返り。自力英訳と比較し、汎用的に使えそうな単語は意識しておく。
(実践⑤)よりシンプルな表現に整理する
- twitterで練習として投稿することも考えると、より抽象的でシンプルな表現が良い。
- 日本語を再整理。「私は、解く、小さく 難しいSQLを 順に」「なぜなら、この数学的手法、堅実かつ楽しい」
- 「I clear small parts of difficult SQL problem in order. 」「because, this mathematical method is solid and fun. 」
参考書籍
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- データベーススペシャリスト2022年版/三好康之/翔泳社
- おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
コメント