Use when the user mentions SQL查询、取数、数据库查询、写SQL、sql query、database query, or asks to generate SQL from natural language. NOT for 数据库设计、数据库运维、ORM编程、数据仓库建模.
将自然语言描述转化为可执行的SQL查询语句,附带执行逻辑解释和优化建议,帮助非技术岗位(产品、运营、分析师)自助取数,解决"每次取数都要排队等开发"的效率瓶颈。
用户:帮我写一个SQL
→ 请告诉我:1) 查什么数据?2) 从哪个表?3) 有什么筛选条件?
用户:查最近30天每日新增用户数
→ 生成SQL + 解释 + 注意事项
用户:再加上按渠道分组
→ 在原SQL基础上添加GROUP BY
用户:这个SQL跑了10分钟,能优化吗?
→ 分析性能瓶颈,提供索引建议和优化方案
用户:帮我把这个SQL解释一下
→ 逐行解释查询逻辑
🔍 SQL 查询助手
━━━━━━━━━━━━━━━━━━━━
需求:[用户需求]
数据库:[MySQL/PostgreSQL/其他]
## SQL语句
SELECT
DATE(created_at) AS date, -- 日期
channel, -- 渠道
COUNT(DISTINCT user_id) AS new_users -- 新增用户数
FROM users
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
AND status = 'active'
GROUP BY DATE(created_at), channel
ORDER BY date DESC;
## 逻辑解释
1. 从 `users` 表查询数据
2. 筛选最近30天的记录
3. 按日期和渠道分组
4. 统计每组的去重用户数
5. 按日期倒序排列
## 预期输出
| date | channel | new_users |
|------|---------|-----------|
| 2024-01-15 | 自然流量 | 256 |
| 2024-01-15 | 广告投放 | 183 |
## ⚠️ 注意事项
- 确认 `created_at` 字段有索引,否则大表查询会很慢
- `COUNT(DISTINCT)` 在数据量大时较耗性能
- 如果时区不一致,日期可能有偏差
## 优化建议
- 建议在 `created_at` 列添加索引
- 数据量超过1000万时考虑分区表
| 异常场景 | 提示语 |
|---|---|
| ---------- | -------- |
| 不知道表结构 | "📋 请提供表名和关键字段。如果不确定,可以先执行 SHOW TABLES 和 DESCRIBE 表名 查看" |
| SQL报错 | "🔧 请把错误信息发给我。常见原因:字段名拼写错误、权限不足、语法不兼容" |
| 需求模糊 | "💬 '查活跃用户'需要更精确的定义:什么行为算活跃?时间范围是?" |
| 生成了危险SQL | "⚠️ 这是一个修改数据的操作(UPDATE/DELETE),建议:1) 先用SELECT验证范围 2) 在测试环境执行 3) 做好备份" |
| 涉及多表关联 | "🔗 需要JOIN多张表。请确认表之间的关联字段(如user_id),以及是否允许NULL值" |
Q: 不知道表名和字段怎么办?
A: 可以先问DBA或查看数据字典。也可以执行 SHOW TABLES 和 DESCRIBE 表名 查看。
Q: MySQL和PostgreSQL有什么区别?
A: 主要是函数名和日期处理不同。告诉我你用的数据库,我会用对应语法。
Q: SQL跑得很慢怎么办?
A: 发给我你的SQL和表结构,我帮你分析性能瓶颈并优化。
Q: 能帮我写存储过程吗?
A: 可以。但存储过程较复杂,建议先说明整体逻辑流程。
Q: 数据安全怎么保证?
A: 我不会生成破坏数据的SQL(DELETE/DROP等),除非你明确要求。建议在测试环境先验证。
| 场景 | 原因 | 替代方案 |
|---|---|---|
| ------ | ------ | ---------- |
| 数据库设计 | 需要完整的ER设计和范式规划 | 咨询DBA |
| 数据库运维 | 涉及备份、主从、调优等系统操作 | 联系运维团队 |
| ETL数据管道 | 需要调度和依赖管理 | 使用Airflow等ETL工具 |
| NoSQL查询 | 语法完全不同 | 说明具体数据库(MongoDB等) |
共 1 个版本