logo
📊
AI Learning

AI 数据分析

用 AI 把数据变洞察

📊SQL Copilot 与表结构提示

SQL Copilot 与表结构提示

让 AI 生成可执行 SQL 与解释

Text-to-SQL 的最佳实践

直接问 "帮我查去年的销售额" 通常会得到错误的 SQL,因为 AI 不知道你的表结构。成功的关键在于 Schema Context (表结构上下文) 的提供。

标准 Schema Prompt 模板
### 角色
你是一个高级数据分析师,熟悉 PostgreSQL 语法。

### 表结构
1. **orders** (订单表)
   - order_id (PK): 字符串
   - user_id: 关联 users 表
   - amount: 订单金额(分)
   - status: 枚举值 [paid, pending, cancelled]
   - created_at: 时间戳

2. **users** (用户表)
   - user_id (PK)
   - source: 渠道来源

### 任务
请帮我统计 2024 年各渠道的 GMV(已支付订单总金额),按金额降序排列。
注意:amount 单位是分,需要除以 100 转为元。

复杂查询策略

  • CTE (Common Table Expressions): 强制要求 AI 使用 `WITH` 子句。这样生成的 SQL 逻辑清晰,不仅易于 AI 自我检查,也方便人工 Review。
  • 逐步推导: 对极其复杂的逻辑(如归因分析),先让 AI 写中间逻辑,再合并成 SQL。

⚠️ 注意

幻觉陷阱: AI 喜欢编造字段(比如把 user_id 编成 uid)。必须强制它"只使用提供的字段,严禁猜测"。

安全性 Checklist

风险点解决方案
数据泄露不要上传真实数据样本,只传表结构和脱敏后的 3 行样例数据
破坏性操作使用 Read-Only 账号连接数据库;Prompt 中明确 "只生成 SELECT 语句"
性能爆炸限制查询时间(Timeout);强制加 LIMIT

SQL Guardrails Prompt 模板

复制即用模板
你是 SQL Copilot,仅允许输出 **SELECT** 语句。
规则:
1) 只能使用提供的字段;禁止臆造列名。
2) 必须包含时间范围过滤(>= start_date AND < end_date)。
3) 必须包含 LIMIT 1000。
4) 在 SQL 之后输出风险点清单(可能的偏差/遗漏)。

表结构:...(贴表结构与样例)
问题:...(业务问题)

结果验证与抽样

  • 对账: 取 10 条样例订单,人工核对 SQL 过滤条件是否正确。
  • 双路径: 同一问题用 SQL 与 Pandas 各算一遍,比对结果差异。
  • 边界条件: 特别检查空值、取消订单、退款数据的处理逻辑。

常用 SQL Prompt 速查

  • 同比/环比: 先聚合到月,再用窗口函数计算 Lag。
  • 留存: 先得到 cohort,再 join 回行为表统计活跃。
  • 漏斗: 分步骤计数,最后按步骤顺序输出。
环比模板
请生成 SQL:按月统计 GMV,并计算环比(MoM)。
要求:
- 使用 WITH CTE
- 输出字段:month, gmv, mom_change
- 只使用订单状态=paid

行业案例:电商

电商 GMV 与复购
表结构:orders(user_id, order_id, amount, status, created_at), users(user_id, channel)
任务:
1) 按月统计 GMV(已支付)
2) 计算复购率(当月下单用户中,历史已下单占比)
要求:
- 使用 CTE
- amount 单位为分,需 /100
- 输出:month, gmv, repurchase_rate

电商案例补充:口径与陷阱

  • GMV 口径: 是否包含退款/取消订单?常见口径为 paid 且未退款。
  • 复购口径: 是否按用户去重?是否按自然月/滚动 30 天?
  • 渠道口径: 用户来源是首单来源还是最后触点?
  • 时间口径: created_at 是否为 UTC?是否需转时区?

⚠️ 注意

高风险陷阱: AI 容易忽略退款订单和测试订单,必须在 prompt 中明确排除。

行业案例:内容

内容发布与转化
表结构:posts(post_id, author_id, publish_at), views(post_id, user_id, view_at), orders(user_id, amount, created_at)
任务:
1) 统计每篇内容发布后 7 天的独立浏览人数
2) 统计 7 天内由这些读者产生的订单金额
要求:
- 先用 CTE 计算窗口
- 只统计 view_at 在 publish_at 之后 7 天内

内容案例补充:指标定义

  • 独立浏览: 按 user_id 去重;匿名用户需要 session_id 去重。
  • 转化归因: 7 天内下单是否归因到该内容?是否需要最后触点?
  • 内容类型: 是否需要区分图文/视频/直播?
  • 发布时间: 是否过滤草稿/下线内容?