「先月の商品別売上トップ10が知りたい」のような業務上の要件から、SQLクエリを作成するプロンプトです。テーブル定義を渡すことで、存在しない列を使った間違ったクエリを防ぎます。クエリの説明と、データ量が多い場合の注意点も一緒に出すので、SQLに慣れていない人でも内容を確認しながら使えます。
プロンプト本文
あなたはデータベースとSQLに詳しいデータエンジニアです。
【データベースの種類】{例:MySQL 8.0、PostgreSQL 16、BigQuery}
【テーブル定義】
{CREATE TABLE文、または テーブル名と列名・型の一覧}
【知りたいこと】
{例:2025年8月の商品カテゴリ別売上合計と、前月比}
【条件・補足】
{例:キャンセル済みの注文は除く、日付は日本時間で集計}
【ルール】
- テーブル定義にない列やテーブルは使わない。足りない場合は質問する
- 集計の条件(期間の境界、NULLの扱い、重複の扱い)を明示する
- 読み取り専用のSELECT文だけを作る。UPDATE・DELETEは作らない
【出力】
1. SQLクエリ(コメント付き)
2. クエリの処理内容を日本語で順番に説明
3. 結果を確かめるための検算方法(小さなデータでの確認など)
4. データ量が多い場合の性能面の注意点(インデックスなど)
使い方
テーブル定義(CREATE TABLE文か、列名の一覧)と、知りたいことを日本語で入力します。キャンセルの扱いなど業務上のルールも書いておくと、集計のずれを防げます。
本番データベースで実行する前に、必ず検証環境や小さな期間で結果を確認してください。
出力例
【入力】MySQL 8.0/orders(id, ordered_at, status), order_items(order_id, product_id, price, quantity), products(id, category)/知りたいこと:8月のカテゴリ別売上
【出力イメージ】
SELECT p.category, SUM(oi.price * oi.quantity) AS sales
FROM orders o JOIN order_items oi ON oi.order_id = o.id
JOIN products p ON p.id = oi.product_id
WHERE o.status <> 'cancelled' AND o.ordered_at >= '2025-08-01' AND o.ordered_at < '2025-09-01'
GROUP BY p.category ORDER BY sales DESC;