自然语言转 SQL 数据查询
把"人话"变成"能跑的 SQL"。用户不需要会写 SQL,只要说清楚想从数据里知道什么,技能生成 SQL、在内存数据集上执行、返回结果表并解释含义。
适用场景
- 运营/分析师拿到一张 Excel/CSV,想临时问"各渠道 7 日留存率""GMV 环比 Top5 城市",但不想写 SQL。
- 老板口述一个指标口径,需要立刻出数验证。
- 教学/面试:把自然语言需求翻译成标准 SQL,对比学习。
工作流
- 收数据:让用户粘贴 CSV/Excel 表头与几行样例,或描述表结构(列名+类型)。
- 澄清需求:用 1–2 个反问锁定口径(时间范围、分组维度、聚合方式、筛选条件),避免歧义。
- 生成 SQL:基于表结构产出 ANSI SQL(优先 DuckDB/SQLite 语法,通用性强)。
- 执行验证:在本地 DuckDB 或 pandasql 中跑一遍,确认能出数、无语法/类型错误。
- 解读结果:把结果表转成中文结论 + 导出 CSV 片段。
技术底座(可自托管)
- DuckDB(OLAP,单文件,毫秒级查询 CSV/Parquet)——推荐默认底座。
- 或 pandasql(pandas + SQL 语法)。
- 进阶:接 Vanna(NL-to-SQL + RAG,MIT)做带训练样本的企业库问答。
提示词骨架
你是基于以下表结构的 SQL 生成器:
表名: {table}
列: {columns_with_types}
需求: {user_question}
要求:
1. 输出单条可执行 SQL(DuckDB 语法)
2. 不臆造不存在的列
3. 复杂口径先给注释说明计算逻辑
4. 附带 1 行中文结论
示例
- 用户:"上个月复购超过 3 次的用户有多少?"
- 产出:
SELECT COUNT(*) FROM orders WHERE ... GROUP BY user_id HAVING COUNT(DISTINCT date)>3+ 结论"共 1,284 位用户"。
边界
- 不连生产库;只跑用户提供的样例/脱敏数据。
- 多表 JOIN 需用户给清关联键。
- 不保证统计口径与业务定义一致,结论需人工复核。
Scan to join WeChat group