PMをしています。毎回データチームに分析をお願いするのも申し訳ないのでSQLをプライベートで勉強しています。
Udemyを受講したりYouTubeを見て基礎はある程度学べたのですが本番のデータベースを見ると複雑すぎて手が動かなくなります。皆さんはどうやってこの壁を乗り越えましたか...?
PMをしています。毎回データチームに分析をお願いするのも申し訳ないのでSQLをプライベートで勉強しています。
Udemyを受講したりYouTubeを見て基礎はある程度学べたのですが本番のデータベースを見ると複雑すぎて手が動かなくなります。皆さんはどうやってこの壁を乗り越えましたか...?
私は誰かのデータ抽出依頼をひたすらこなすことでSQLの力はついたと思ってます。
ただ0から作るのは難しいと思うので、データ抽出を依頼してきた人に以下のどれかを求めてみると良いかもしれません。
①欲しいカラムの一覧、出来ればExcelなどの表になっている形
これは完成形が見えているので、それに近づくように試行錯誤出来ますし、提出するときに擦り合わせも容易になるかなと思います。
②似たようなデータ抽出を頼んだことがあるか、もしあれば誰に頼んだか
これはその人がクエリを持っている可能性がたるからです。
可能であればそのクエリをもらい、改良して抽出するといいと思います。
> これはその人がクエリを持っている可能性がたるからです。
これはその人がクエリを持っている可能性が高いからです。
↑すいません、誤字でした。
あとスマホの関係で3つ目が書ききれなかったので追記です。↓
③頻繁なFB
これはそのままで、間違える前提で何度も期待したデータ抽出になってるかをみてもらうと良いと思います。正直これが一番よいやり方でして、どういうデータが欲しいかって、その人が一番わかってるので一発で出すのはほぼ不可能だと思ってます。もちろんある程度ドメイン知識があれば可能だと思うのですが、お互いの情報量に差があるほどここは難しいので、無理を承知でお願いすると良いかもしれません。
コメントありがとうございます!
私自身がPMということもあり、基本的にデータ分析を依頼する側となります。自身の頭の中にはこういうイメージ(カラム)というものは浮かんでいます。しかしどうやったらそこに辿り着けるのか、無数にあるテーブルの中からサブクエリなどを使って必要なテーブルを準備した上で抽出したいデータを取るとなると急にどこから手をつけようかと手が止まってしまっています…似たような分析をする機会は多いのでデータチームの方に使ったクエリを頂いて見ます!
ここでよく聞くLeetCodeでもSQL練習出来るんですね!?
一般的な仕事で使うレベルであれば使えますが、無茶苦茶得意かと言われるとそうではないかもしれません…(Pivot Tableくらいまでが限界です)
ところで本番のデータベースが複雑という記述がありますが、具体的どういったところが複雑でしょうか?どんなところでつまづいてるのかによってもやること変わるかと思います。
カラムが多く、定義も把握していないため、分からないことだらけになるのか。
何をすべきか、どこにどんなデータはあるかわかるが、いざクエリを書こうとするとどこから書いたらいいのかわからないのか。
クエリは書けるが、書き始めるとエラーにばかりになるうえ、複雑な処理になるとデバッグでこんがらがるのか。
幸いにもテーブルやカラム名はそれなりに明確に定義されているため、時間はかかりますが何とかなっています。
どちらかというと >何をすべきか、どこにどんなデータはあるかわかるが、いざクエリを書こうとするとどこから書いたらいいのかわからないのか。
これが一番大きいです。最近気がついたのは一気にアウトプット全体をひとかたまりとして考えようとするからダメなのかなと思っています。みなさん基本的にアウトプットとなるテーブルを定義してから、1カラムずつどうやって出すか考えていく感じなんですかね・・・?
それでしたら、既に書かれている通りアウトプットを決めてから、そこにたどり着くまでどんな操作があるのかステップに分けて、中間テーブルを作りながら最終型にしていく訓練をするのがよいかもしれません。イメージが付きにくいうちはExcelでテーブルのサンプルをつくり、処理過程を模擬的に表でつくるのもありと思います。
多分最終型にたどり着くまで、最終型をトップとして、元々のテーブルが末端のツリー構造になるので、上から見てクエリの構成を書いていき、中間テーブルの中身はwith句でつくったテーブルやサブクエリで置き換えるのがシンプルと思います。集計速度とか書き方のスマートさとかはその次で良いと思います。leetcodeでより簡単な練習ができるのでおすすめです。
明確なアドバイスありがとうございます!
早速今日の仕事から実践してみます。
今LeetCodeにも登録しまして、Easy問題であれば少し時間をかければ解けそうなので一日数問解くことを日課にしてみようと思います。
> アウトプット全体をひとかたまりとして考えよう
ここの考え方を変えるだけで考えやすくなりそうですね
自分の頭の中はこんな流れで、必要なデータを分解して考えて、最後に結合するイメージです。
例) 特定のユーザー属性の特定期間のログイン回数、購入回数を取得する
・アウトプットに必要な情報のグループを考える
対象のユーザー群、ログイン、購入履歴
・それぞれに対し取得するクエリを書く
sumやavgなど加工が必要ならやる
・上記のデータ同士を結合させ、結果を整形する
全然参考にならないかもですが、勉強せずに2年くらいやらずにいて久々に副業でやったらなぜか出来るようになってました。
PM続けていたらいろんなデータベースやSQLの知識が自ずとついたから理解しやすくなったのかもと思っています。めげずに目の前のお仕事頑張りましょう!
クエリを書いて問題解決する過程でそうかこのデータはここにあるのか。エンティティーの関係もよくわかる。またライフサイクルに関しても理解が深まる。欲しいけどないデータにも意識が回る。プロダクトを理解するために重要な工程だと思うので、プレッシャーの少ない早朝や夜遅くに触ってみてます。
データサイエンティストやエンジニアでなければ、もはやSQLあんまり勉強する必要ないとおもってます。基礎や考え方さえ抑えておけば、cahtgptと対話しながらそこそこ複雑なクエリもかけちゃうので。
chatgptに聞けば何かしら返ってくると思いますが、それが正しいかを判断するためにはSQLの知識が必要だと思うので、私は依然としてSQLは勉強しておく必要があると思っています。
またある程度知識がないとchagptから答えを得るための適切な質問を作成できない&分析アイディアも思い浮かばないと思います。
いかがでしょうか?