数据分析师用 AI 写 SQL 查询:提示词与 SQL 示例
作为负责取数、做报表和业务分析的数据分析师,你可能也有同感:大量时间花在写取数语句、调整表格格式和把结论翻译成业务语言上。很多人知道要查什么数据,但写 SQL 时卡在关联、分组和窗口函数上。下面以数据分析师的真实场景为例,演示用 AI 写 SQL 查询的完整流程:提供表结构和字段含义,用自然语言描述需求,让 AI 写 SQL 并解释每一步,再用小范围数据验证。
典型场景
数据分析师需要从数据库里查“订单明细”相关的数据:按渠道统计最近一个月的订单金额,还要和上个月对比。数据团队排期很满,自己写 SQL 又总是出错。而且数据分析师手上通常同时压着“输出新用户分层分析”之类的事情,如果每次都从零开始,很容易顾此失彼。
推荐工具
可以用 ChatGPT、Claude、DeepSeek 等对话助手,也可以用数据库客户端或 BI 工具内置的 AI 查询功能(如 DataGrip、DBeaver 的 AI 助手,以及不少 BI 平台的自然语言查询)。
案例:一次完整的使用过程(虚构)
下面这个例子是虚构的:小赵遇到的难题是“埋点在新版本中有字段调整,历史数据口径需要重新对齐”。为了不让它拖慢“完成 9 月用户留存分析报告”的进度,小赵决定借助 AI 写 SQL 查询。第一次只写了一句简单的要求,结果很空泛;第二次把对象(业务负责人)、目的和限制条件都写清楚,输出就可用多了。这也是本文提示词模板要把背景写全的原因。
分步操作
- 提供表名、字段名、字段类型和含义,不需要真实数据
- 说明数据库类型,例如 MySQL 8 或 PostgreSQL
- 用自然语言描述需求,最好附上期望结果的样子
- 让 AI 解释 SQL 的每个部分
- 先加 LIMIT 在测试库或小范围运行,核对结果
可复用的提示词
提示词的关键是把背景、要求和输出格式写清楚:
【背景】身份:负责取数、做报表和业务分析的数据分析师;平时主要和业务部门和业务负责人打交道。
数据库:MySQL 8.0
表 records(订单明细),字段:
- id:主键
- category:渠道,文本
- record_date:下单日期,DATE
- amount:订单金额,数值
- type:用户类型,文本
需求:
1. 统计 2026 年 10 月每个 category 的 amount 合计和记录数
2. 同时给出 9 月的合计,以及环比变化百分比
3. 按 10 月合计从高到低排序
请写出 SQL,并逐段解释;如果 9 月没有数据,环比显示为 NULL。
效果示例(虚构演示)
示例输出如下(虚构内容,仅演示 AI 大致会给出什么样的结果):
WITH m AS ( SELECT category, SUM(CASE WHEN record_date >= '2026-10-01' AND record_date < '2026-11-01' THEN amount END) AS oct_total, COUNT(CASE WHEN record_date >= '2026-10-01' AND record_date < '2026-11-01' THEN 1 END) AS oct_cnt, SUM(CASE WHEN record_date >= '2026-09-01' AND record_date < '2026-10-01' THEN amount END) AS sep_total FROM records WHERE record_date >= '2026-09-01' AND record_date < '2026-11-01' GROUP BY category ) SELECT category, oct_total, oct_cnt, sep_total, ROUND((oct_total - sep_total) / NULLIF(sep_total, 0) * 100, 1) AS mom_pct FROM m ORDER BY oct_total DESC;解释:先用条件聚合一次算出两个月的数据,NULLIF 避免除以 0,WHERE 限定时间范围以利用日期索引。
拿到类似的结果后,小赵的做法是先核对事实和数字,再结合“优化看板查询性能”的安排调整重点,最后才对外使用。
避坑指南
- 表结构描述越准确,SQL 越可用;字段含义不清时 AI 会猜。
- 先在测试库或加 LIMIT 运行,大表上的错误查询可能拖慢数据库。
- 不要把含有用户明细、手机号和未公开的经营数据的查询结果交给公共 AI 工具。
给数据分析师的特别提醒
给 AI 表结构和字段含义,而不是真实数据;需要样例时用脱敏或虚构的几行。同时要记住:AI 不了解你们的指标口径,写出的语句和结论都要用小样本核对一遍。
再补充一条经验:让 AI 同时给出分析假设和验证方法,避免直接跳到结论。
还可以这样用
- 转换方言:把 MySQL 语句改写成 PostgreSQL 或其他数据库的写法。
- 生成测试数据:让 AI 写插入语句,构造用于验证的样例数据。