データベーススペシャリスト資格|2022年10月挑戦ログ 5月26日|SQLにおける仮想テーブル利用(確認ドリル)

高度IT・基礎知識

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

今回はSQLにおける仮想テーブル利用(確認ドリル)について書く。

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

確認ドリル016

前回振り返り

  • 前回はサブクエリの実践として、データ調査の例題(作業記録とカレンダーという2つのテーブルを用いて、休業日を調査)を学んだ。
  • 以上により、「仮想テーブル」を扱う操作について「with句」「ビュー」「サブクエリ」を一通り学習できた。
  • 今回は仮想テーブルの操作をまとめて復習するため、確認ドリルを解く。

問題

  • [sales]テーブルには、15種類の商品ID(product_id)が販売された記録が格納されています。
  • 商品ID(product_id)別に平均単価を計算し、これを①とします。
  • さらに、15種類の①について平均したものを②とし、[avg_unit_price_by_product]とします。
  • そのうえで、[sales]テーブルにおける商品ID別の平均単価(avg_unit_pricd⇒①)が②より大きい商品IDに絞り込み、以下の5カラムの結果テーブルを取得してください。並び替えは[avg_unit_price]の大きい順とし、最低1か所でサブクエリを利用してください。

必要なカラム

  1. 商品ID(product_id)
  2. 販売個数合計(sum_quantity)
  3. 販売金額合計(sum_revenue)
  4. 商品ID別の単価(avg_unit_price)⇒①
  5. 商品ID別の平均単価の平均(avg_unit_price_by_product)⇒②

SQL実践(テーブルの確認)

  • まず、「[sales]テーブルには、15種類の商品ID(product_id)が販売された記録が格納されています」とあるのでこれを確認。
  • 以下のとおりsalesテーブルにはproduct_idがあり、1から15まであることを確認できた。

SQLの実践(group byと集計関数sum)

  • 次に、「商品ID(product_id)別に平均単価を計算し、これを①とする」から行う。
  • 「商品ID別に平均単価」とあるので、group byで商品IDごとに販売額合計(sum_revenue)と販売数合計(sum_quantity)を求め、割り算で平均単価を計算する。
  • このとき、product_idで束ねる(group byを用いる)ため、select句のproduct_id以外には集計関数しか使えないことに注意。よって、割り算はsum(revenue)/sum(quantity)と計算する。(赤枠部分)
  • SQLは以下のとおり

SQLの実践(with句と集計関数avg)

  • 次に、「これを①とする」とあるので、仮想テーブルとして一時保存するためwith句を用いる。
  • 具体的には以下赤枠の通り。独立した仮想テーブルを一時保存するのにwith句は最適。
  • また、「15種類の①について平均したものを②とし[avg_unit_price_by_product]とします」とあるのでこれも計算する。具体的には以下青枠の通り。with句のテーブルでグループ化は済んでいるので、そのまま集計関数avgを利用できる。

SQLの実践(サブクエリと絞り込み条件)

  • ここまで出来たら、あとは今まで作成してきた列を全て表示する。
  • まずwith句のテーブルに殆どの要素は含まれるので、「select * from master」と指定。
  • 次に、先ほどの②(総平均)を求める式をサブクエリとし、列の追加や絞り込み条件に使えるようにする。この確認ドリルはサブクエリによる値の抽出と、それを利用した絞り込みに関する事例。

考察

  • SQLについて。「仮想テーブル」を扱う操作に関して「with句」「ビュー」「サブクエリ」を一通り学習できた。今回は仮想テーブルの操作をまとめて復習するため、確認ドリルを解いた。
  • 考察。「他の人に迷惑をかけない限り、みんな幸せになる権利がある」(日本国憲法13条意訳)や「幸せの定義は各々自分で考える」などの「より良く生きるための原則」はあらゆる場所で応用できると考える。当たり前であるが故に忘れがちなので、倫理学の復習とアウトプットも定期的に行いたい。

考察のシンプル化と英訳(練習中)

  • I try to relearn the ethics regularly. because, the wisdom to live well is useful.
  • (私は定期的に倫理学を学び直します。なぜなら、良く生きるための知恵は役に立つからです)

参考書籍

  • 集中演習 SQL入門/木田和廣/株式会社インプレス

コメント

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