データベーススペシャリスト資格|2022年10月挑戦ログ 5月17日|SQLによる仮想テーブルの作成(復習・確認ドリル)

高度IT・基礎知識

この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。

今回はSQLによる仮想テーブルの作成(復習・確認ドリル)について書く。

※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。

確認ドリル 問題011

前回振り返り

  • SQLについて。今までは「実態のあるテーブル」の操作(列、行、グループ化、複数テーブルの結合と集合演算)を想定してきたが、現在は「仮想テーブル」を扱う操作を学んでいる。前回は「with句」「ビュー」について学んだ。
  • 今回は復習として確認ドリルを行う。

問題文

  1. [sales]テーブルと[products]テーブルを結合して、
  2. カテゴリ(product_category)別の販売金額(revenue)を合計を集計し、
  3. 金額の大きい順に並べてください。

SQLの実践1

  • まず、2つのテーブルを単純に結合するSQLは以下

SQLの実践2,3

  • 次に、「カテゴリ(product_category)」で束ねて、販売金額(revenue)を合計する。
  • 最後に、合計の高い順に並び替える。結果は以下。
  • 問題をいくつかに分け、基本的な技法を、確実に積み上げて(都度反応を見ながら)ゴールに向かう。

確認ドリル 問題012

問題文

  1. [sales]テーブルから、商品ID(product_id)別の、販売個数の合計と
  2. その合計がテーブル全体の販売個数の何%になっているかの割合(sales_share)を調べてください。(sales_share)は少数で構いません。
  3. 結果テーブルは商品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年版/三好康之/翔泳社
  • おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社

コメント

タイトルとURLをコピーしました