へんてこのブログ

日々気づいたことや、最近やっていることを書いています

SQLをChatGPTに書いてもらうのが便利

最近データの確認や集計時に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の一番の有用な使い方です。