SQL 查询生成
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/sql-query-generation。
技能介绍
问题在哪
业务同学和工程师经常手里只有自然语言问题和一份(往往还不完整的)表结构,却要写出能跑、能维护、还别拖垮库的 SQL。难点通常不在「会不会写 SELECT」,而在:指标和实体怎么对应到表和列、一对多连接会不会把聚合数算歪、CTE 和窗口函数该用哪一层、以及上线前怎么判断会不会全表扫。
技能如何工作
该技能把请求拆成一条可重复的工作流:
- 解析意图——区分是要汇总指标还是行级明细,抽出过滤、分组、排序条件。
- 对齐模式——在 DDL 或表列清单里找表、列和外键路径,消歧义引用(例如「销售额」到底落在哪张表)。
- 选结构——按复杂度选用聚合、窗口函数、CTE 或子查询;多步计算优先 CTE,排名/累计用窗口函数,连接用显式
JOIN。 - 生成与校验——输出格式一致的 SQL(关键字大写、别名清晰),必要时跑
EXPLAIN/EXPLAIN ANALYZE,从执行计划里看顺序扫描、哈希连接、排序溢出等问题,并给出索引、谓词下推或重写建议。 - 说明假设——用白话解释查询在算什么、结果长什么样,以及依赖的模式或数据前提。
方言上覆盖 PostgreSQL、MySQL 8.0+、SQLite、SQL Server、BigQuery 等常见差异(如 CTE、窗口函数、QUALIFY 等)。
适用边界
- 你需要提供问题 + 模式(DDL、表列列表或关系说明);列名与真实库不一致时,生成结果必须对照实际 DDL 再执行。
- 自然语言若存在多表同名列或指标定义模糊,技能会倾向于限定别名或请你澄清,而不是瞎猜业务口径。
- 探索性查询应带
LIMIT;深分页、时区边界、NULL 语义和除零等边缘情况,技能文档里有对应写法(如NULLIF、COALESCE、半开区间日期过滤),但仍以你的业务定义为准。
使用场景
- 业务方用口语描述多表指标(排名、同比、分组),你只有 DDL,需要落成带 CTE 或窗口函数的可读 SQL。
- 生产环境报表在百万行量级耗时明显,需要对照 EXPLAIN 输出定位顺序扫描、连接顺序或排序溢出并重写。
- 探索性分析时要把「前 N 客户、品类偏好、时间范围过滤」对齐到 orders、customers 等表,避免一对多连接把计数算膨胀。
- 目标库是 PostgreSQL、MySQL 8+ 或 BigQuery,需要在同一套意图下选用对应方言的 CTE、窗口函数或 QUALIFY 等写法。
适合人员
- 对接口头指标需求的数据分析师,要把「算什么、按什么筛、怎么排」准确对应到表和列。
- 负责线上 SQL 性能的后端工程师或 DBA,需要依据执行计划建议索引、谓词下推或查询重构。
- 持有 schema 文档却要交付复杂 JOIN 与汇总逻辑的全栈或数据工程师,希望输出带别名与注释的可维护语句。
- 在仓库或业务库做临时探查的数据工程师,需要自然语言生成 SQL 并遵守 LIMIT、分页与时区边界等约束。