🍓

ChatGPTに壁打ちしまくってSQLを勉強したら、いつの間にかモデリングテーブルを作ってた話

に公開

ChatGPTに壁打ちしまくってSQLを勉強したら、いつの間にかモデリングテーブルを作ってた話

はじめに

新米プロダクトマネージャーのabechiです。
「非エンジニアもSQLを書いてデータ分析できた方が良い」「非エンジニアがSQLを書けるようになる方法」といったコンテンツはたくさんあると思います。
今回は"ChatGPT(Gemini等でも可)に壁打ちしまくって最短でSQLを書けるようになる方法"と、"書けるようになってこんないいことがあった"という話をします。
SQLの勉強を始めたい、始めているけどちょっと躓いている人の力になれれば嬉しいです。


ChatGPTを使った学習スタイル

前提

前提、「学習」というのは言わずもがなインプットとアウトプットの両輪が必要です。
アウトプットに含まれますが「フィードバック」もかなり重要で、特に学習を進める中で"早いフィードバック"は学習速度に大きく影響すると思っています。自分のミスの原因が分かるのに1週間もかかっていたら、何がしたかったのかさえ忘れます。
この"早いフィードバック"はChatGPTとの壁打ちが実現してくれます。

Progateは2周ほどして文法は覚えましたが、その後は「実務でひたすら書いてみるしかない」のでデータ構造をキャッチアップして実際に書き始めていきましょう。

STEP1:最初はエラーを貼るだけ

まず最初にSQLを書き始めたら必ずエラーが出ます。エラーは友達です。
ステップ1としては「自分が書いたクエリとエラーメッセージを貼って、ただ聞く」スタイルから始めます。

~~~SQLの記述~~~
このクエリでこのエラーが出ます。原因は?

ChatGPTはエラー箇所を特定し、書き直しを提案してくれます。これだけでも「早いフィードバック」が実現され学習速度が格段にあがります。
今までであれば、自分で頑張って調べたり知見のある誰かに聞くしかなかったことでしょう。

STEP2:出したい数値を伝える

次第に、ただエラーを貼り付けて修正を依頼するのではなく「やりたいこと」から伝えてみます。

ユーザーが一番最初にCVしたカテゴリが知りたい。
まず1ユーザーごとに、CVに順番をつけて、最も昔のレコードを分かるようにするには?
カラムはこういうカラムがあるので使えそうです。
user_id、created_at

すると下記のように教えてくれます。

ここで学べることは例えば下記です。

  • 「ROW_NUMBER()」っていう関数があるのか
  • 見た感じ、PARTITION BYの後ろが、「◯◯ごと」を示すのか
  • order by の後ろが昇順(もしくは降順)並べたいカラムを入れるんだな。ASCで昇順ってことか

「これができたら、これもできるだろう」「この関数の意味はここがこれを指し示しているんだろうな」という妄想に近い推測も学習速度を早めますね。もちろん上記のような学びをChatGPTに確認してもよいでしょう。

他にも、自分が書いたクエリを送って「この記述だったら、ロジックはこうだよね?」と確認してみるのも勉強になります。
自分はimpression数を書いたつもりでも、もしかしたらimpression_UUかもしれません。

STEP3:人のクエリを貼って送ってみる

~~~SQLの記述~~~
このクエリは、〜というデータを出しています。
それぞれのサブテーブルごとに何をしているのか説明して

これで丁寧な解説をしてくれます。
私はこれを実施して初めて「left join すれば"AのテーブルにいるけどBにいない"が出せる」という大きな学びを得ました。
それまではjoinのことをよくわかっていなかったので、とにかくinner joinしていたし「AのテーブルにいるけどBにいない」をやりたいと思ったこともなかったので、「joinがあればなんでもできる」と、世界が広がったのを覚えています。

STEP4:1~3をひたすら繰り返す

ステップ1〜3をひたすら繰り返して、自分が出したい数値を出していき、「そもそもその数値の出し方はバイアスかかっているのでは?」といったフィードバックを諸先輩方からいただきながら爆速成長することができるでしょう。


ChatGPTと一緒に勉強したからこそ育った"質問力"と思考の型

問い方が変わると、学びの質も変わる

このプロセスを通じて、SQLスキルだけでなく「問題をどう定義し、どう分解するか」というスキルも伸びていった感覚があります。

  • 目的を先に言語化する
  • 現在の状態(試したこと、得られた結果)を共有する
  • 求めている方向性や制約条件を補足する

こうした質問の工夫により、ChatGPTの回答精度も上がり、自分の思考も整理されるようになりました。
これはChatGPTに対してだけでなく対人コミュニケーションにも応用できることですね。


「SQLが書ける」の、その先

SQLを書くことができると、自分が出したいデータや依頼されたデータを出せるようになります。
しかし私が感じている価値はそれだけではありません。
bizサイドの「これってできる?」に答えられるようになったことも、自分の中では価値に感じています。

「こういうデータ出せる?」「こういうことってできる?」という質問は色んな人から色々な目的で聞かれます。
SQLを勉強したことで、自分が関わるプロダクト/事業のデータ構造(テーブルやイベント)が頭に入るので、
「クエリを書けば出せる」「こういう定義になるが、出せる」と答えられるようになったことは、一段階、昇華できた感覚があります。

また、小さいことではありますが実装時のイベント定義も提案できるようになります。
施策や機能の分析をするので分析視点から「こういう分析をしたいから、このイベント・このパラメータは欲しい」といった提案ができるようになりました。
もちろん細かいイベント設計はエンジニアが考えてくれますが、分析する側だからこその視点はチームの力になると思っています。


モデリングテーブルも作ってみた

現在、弊社ではデータエンジニアが整備してくださり、LightdashというBIツールを使うようになりました。
前までは、分析をするたびに5つ以上のテーブルをJOINすることは日常茶飯事で当たり前なのかと思っていましたが、今では用途に応じて集約されたモデリングテーブルを仕様して、Lightdash上でポチポチとフィルター等を使うことで出したいデータが出せるようになりました。

このモデリングテーブルの構築も、エンジニアに少し相談はしましたがビジネス職出身のPM2人で構築することができました。
分析が楽になることはもちろん、「クエリを書いた人が違うから定義が違う」ということも起きなくなりハッピーです。

ただ、まだLightdashを使いこなせてはいないので好奇心を持って取り組んでいきます。

最後に

「ビジネス職の人もSQLを書ける方が良いのか」については賛否両論ありますが、SQLを勉強することで「データが出せる」以上の得られることがたくさんあります。
誰かの一助になれたら嬉しいです。

Kurashiru Tech Blog

Discussion