この記事は「データベーススペシャリスト資格に興味はあるが、どのようなものか?どう学ぶのか?」という方向けに、具体的な内容と私自身の挑戦ログをお伝えする。学び中の方や、これから学ぼうとされる方の参考になれば幸いだ。
今回はSQLによるテーブル構造の変換(横持ちから縦持ち・サブクエリの応用)について書く。
※注意点として、SQLはDBMSによって作法が異なる。この記事はGoogle Big Queryに準拠するものであることをお含みおき願いたい。
テーブル構造を変換する(横持ちから縦持ち)
前回振り返り
- SQLについて。現在は「仮想テーブル」を扱う操作のうち、最も柔軟に利用できる「サブクエリ」について学んでいる。前回はサブクエリの基本②として、リストを取得する方法と、複数の入れ子構造を学んだ。
- 今回はサブクエリの応用として、テーブル構造の変換について書く。
テーブル構造について
- データベース上のデータには「縦持ち」と「横持ち」がある。
- 例えば以下のように、「北海道・東京・千葉の年度ごとの最低賃金を管理する9行のテーブル」は縦持ちの例。
- 横持ちとは、例えば「year」および「min_wage」のかわりに、「H29のmin_wage」「H30のmin_wage」「R1のmin_wage」のように列を用意するもの。
- 縦持ちの方が一般的。データの追加・操作に対応しやすい。
- ただし、アプリやエクエルからcsvでダウンロードすると横持ちになっていることがある。
- そこで、横持ちのデータを縦持ちに変換する方法を学ぶ。
横持ちのテーブルを縦持ちに変換(一部)
- さて、それでは実際にテーブル構造の変換を実践してみる。
- 以下は、注文ID(order_id)ごとに、ファッション・雑貨・食品の販売額を整理した「横持ち」のテーブルだ。(新しい商品カテゴリが増えたら横に伸ばす)
- これを、注文ID・商品カテゴリ・販売額という縦持ちに変換することを考える。(新しい商品カテゴリが増えたら縦に伸ばす)
- そのためのSQLは以下。まずファッションカテゴリ分だけ縦持ちに変換している。
- ポイントとして、as句で「product_cat」という列を作り、その中には”fashion”という文字列を一律保管するようにしている。
横持ちのテーブルを縦持ちに変換(全部)
- 上と同様に、雑貨・食品も縦持ちのテーブルに変換し、和集合を取れば完成だ。
- なお、この完成したテーブルをサブクエリとして、その集計などを取ることもできる。(ここでは省略)
テーブル構造を変換する(縦持ちから横持ち)
縦持ちのテーブルを横持ちに変換(一部)
- さて、今度は縦持ちから横持ちに戻してみる。場合によってこのようなパターンも想定されるため。
- やり方は先ほどと逆の手順を踏めば良い。まずファッションカテゴリについて、order_idとfashion_revenueの列を再作成する。
- SQLは以下のとおり。後は雑貨・食品も同様に行い、テーブルの結合を行えばよい。
考察
- SQLについて。現在は「仮想テーブル」を扱う操作のうち、最も柔軟に利用できる「サブクエリ」について学んでいる。今回はサブクエリの応用として、テーブル構造の変換について学んだ。
- 考察。業務のピークかつ困難なプロジェクトで心身が疲弊することがある。特に大企業では業務のテンプレ化と細分化が進んでいるので、自由度や多様性の低さ、貢献や達成感の無さなどマイナス面が目に付く事が多い。このような時こそ少し休み、自分と仕事を見つめ直す必要があると感じる。
考察のシンプル化と英訳(練習中)
- when I am very busy, I see only unpleasant side of work. but I believe this is a chance for rest and looking again myself and my work.
- (忙しいとき、私は仕事の不快な側面だけを見る。しかし、これは休息および自分自身と自分の仕事を見つめ直すチャンスだと思う。)
参考書籍
- 集中演習 SQL入門/木田和廣/株式会社インプレス
- データベーススペシャリスト2022年版/三好康之/翔泳社
- おうちで学べるデータベースのきほん/ミック,木村明治/翔泳社
コメント