この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回はSQLにおける仮想テーブル利用(確認ドリル)について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
確認ドリル019
前回振り返り
- 「仮想テーブル」を扱う操作について「with句」「ビュー」「サブクエリ」を一通り学習できた。
- 今回も仮想テーブルの操作をまとめて復習するため、確認ドリルを解く。
問題
- [sales]テーブルには[is_proper]フィールドがあり、「true」は定価での販売、「false」は割引価格での販売であることを示しています。
- 定価での販売金額合計から、
- 割引価格での販売金額合計を差し引いた値を求めてください。
SQL実践(テーブルの確認)
- まず、「[sales]テーブルには」とあるのでこれを確認。
- 以下のとおり[is_proper]フィールドを持つテーブルであることが分かった。
SQLの実践(where句での絞り込み、sum関数)
- 次に、「定価での販売金額合計」について。[is_proper]フィールドが「true」は定価での販売ということなので、where句で行を絞り込んで合計すればよい。
SQLの実践(サブクエリ)
- さて、「割引価格での販売額合計」は、上のSQLにおいてis_properの判断条件を”false”にするのみ。
- その演算結果をサブクエリで引き込み(以下赤枠)、「定価での販売額合計」から引けば良い。
確認ドリル020
問題
- [sales]テーブルから、商品ID(product_id)が「1」の商品について
- 割引販売(is_proper=flase)を行わなかった場合、販売金額(revenue)がいくら増加するかを求めてください。
- 結果は、1カラム1レコードの「1つの値」になります。
SQLの実践(レコードの確認、複数列のgroup by)
- さて、まずsalesテーブルにおいて、product_idが「1」の商品について割引販売が実際にどのように行われたのか調べたい。
- そこで、販売数・販売額・割引有無の3つの組み合わせがユニークなレコードを抽出する。この際は、複数列のgroup byを用いる。
SQLの実践(レコードの再確認、方針の決定)
- 上記のとおり、定価は1個2,000円のようだが、割引額は1個1,600円のときと1,800円のときがあるようだ。
- よって一律の計算は難しい。そこで割引販売したレコードに、「定価で販売した場合の額」を結合して、その差分を総計する方法を取る。
SQLの実践(定価販売額の計算、テーブルの作成)
- まず、「定価販売の単価」はwhere句でis_properがtrueのレコードを絞り、販売額÷販売数の値を1つ取得すればよい(上記のとおり2,000円ではあるが)。
- この結果をサブクエリで引き込み(以下赤枠)、割引販売したレコードが各々保持する販売数と掛け合わせ「割引販売した額」と「定価で販売した場合の額」を持つテーブルを作成する。
SQLの実践(サブクエリ、差額の総計)
- そして、上で作成したテーブルをサブクエリとして引き込み、それにおける差額の総計を求めればよい。
考察
- SQLについて。「仮想テーブル」を扱う操作に関して「with句」「ビュー」「サブクエリ」を一通り学習できた。今回は復習のため確認ドリルを解いた。(group byやwhere句による絞り込み、結果の仮想テーブル化、それについての演算を行う問題を2問)
- 考察。自分の価値観を知っておくことは大事と考える。自分が良いと思うものへの感度が高まり、「引き寄せる」からだ。ちなみに妻は今かりんとう饅頭にハマっており、普段はスルーするスーパーの日替わりお土産コーナーから「引き寄せた」。明日のおやつが楽しみだ。
考察のシンプル化と英訳(練習中)
- it is important to know what I value. because, it brings me good things.
- (私が何を大切にしているかを知ることは重要です。なぜなら、それは私に良いものをもたらすからです)
参考書籍
- 集中演習 SQL入門/木田和廣/株式会社インプレス
コメント