最近データの確認や集計時にSQLを書く際に、大体ChatGPTに聞いて、それを叩き台に少し修正して使ってます。そんな話です。
ChatGPTに聞くと楽
例えば以下の構造のUserテーブルとArticleテーブルがあるとするじゃないですか。
users - id - name - profile_url - updated_at - created_at
articles - id - title - body - user_id - updated_at - created_at
この時に、直近1週間で新規登録したUserの平均記事執筆数
を出したい時に、ChatGPTにこんな感じで聞きます。
以下のUserとArticleテーブルが存在するときに、直近1週間で新規登録したUserの平均記事執筆数を出すSQL書いて users - id - name - profile_url - updated_at - created_at articles - id - title - body - user_id - updated_at - created_at
するとこんな感じのSQLが書かれます。
SELECT AVG(article_count) AS average_articles_per_user FROM ( SELECT COUNT(*) AS article_count FROM articles WHERE user_id IN ( SELECT id FROM users WHERE created_at >= DATE_SUB(NOW(), INTERVAL 1 WEEK) ) GROUP BY user_id ) subquery;
大体あってそうですね。いや、SQLに熟達した人ならサラサラっとかける程度かなと思うんですが、さてどう書いていくかってところから始める人間だと、この叩き台があるとやりたいことが高速でできます。
DBのスキーマ情報をいい感じに渡したい
本当は、DBのスキーマ情報をもっといい感じに渡したいです。今だと手でカラムを書き下して、渡さないといけないので結構めんどくさい。
理想を言えば、テーブル一覧が見れて、選択したもののスキーマ情報を自動で取ってきて、SQLを書いてくれるようにした。もっというと選択もせずに、文脈から勝手に推測してほしい。
文脈から勝手に推測するには、事前にDBのスキーマ情報を全て送っておく必要がありそうで、トークン数の制約上なかなか難しそうだ。LlamaIndexなどを使えば、いい感じにindexからテーブルを引けたりするんだろうか。
さいごに
SQL書くのに、ChatGPTが手放せなくなりました。今のところ、ChatGPTの一番の有用な使い方です。