with one click
sql-analysis
SQL 数据分析时使用。适用于业务指标查询、漏斗分析、留存计算、窗口函数、CTE 递归。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
SQL 数据分析时使用。适用于业务指标查询、漏斗分析、留存计算、窗口函数、CTE 递归。
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
设计 API 认证鉴权和权限矩阵时使用。适用于多角色系统、租户隔离、字段级权限。优先使用 OAuth 2.0 / JWT + RBAC + 资源归属检查。
设计具体 API 端点时使用。适用于资源建模后的下一步、列端点清单、HTTP 方法和状态码选择。优先使用 RFC 7231 HTTP 语义 + GitHub REST 命名规范。
设计 API 错误码和错误结构时使用。适用于错误响应规范、调用方错误处理、调试可观测。优先使用 RFC 7807 Problem Details + 业务错误码 + 调用方处理建议。
设计幂等接口和重试策略时使用。适用于支付、扣减、订单、关键写操作。优先使用 Idempotency-Key + 业务去重键 + 并发冲突处理(ETag/版本号)。
输出 OpenAPI 契约和 Mock 服务时使用。适用于 API 设计的最后一步、给前端/后端/QA 的交付。优先使用 OpenAPI 3.1 + Mock 数据覆盖所有路径 + 详细的下游交接清单。
设计列表接口的分页、筛选、排序、搜索时使用。适用于所有列表 API。优先使用 cursor 分页(大数据)或 offset 分页(小数据)+ 统一筛选/排序规范。
| name | sql-analysis |
| description | SQL 数据分析时使用。适用于业务指标查询、漏斗分析、留存计算、窗口函数、CTE 递归。 |
1. 先明确问题再写 SQL
2. 用 CTE 分步骤(可读)
3. 注意时区和日期边界
4. 排除测试数据 / 异常值
5. 大表注意性能(索引 / 分区)
6. 结果必须可解释
WITH funnel AS (
SELECT
COUNT(DISTINCT CASE WHEN event = 'view' THEN user_id END) AS step1_view,
COUNT(DISTINCT CASE WHEN event = 'add_cart' THEN user_id END) AS step2_cart,
COUNT(DISTINCT CASE WHEN event = 'checkout' THEN user_id END) AS step3_checkout,
COUNT(DISTINCT CASE WHEN event = 'payment' THEN user_id END) AS step4_payment
FROM events
WHERE created_at BETWEEN '2026-05-01' AND '2026-05-31'
)
SELECT
step1_view,
step2_cart,
ROUND(step2_cart * 100.0 / step1_view, 1) AS cart_rate,
step3_checkout,
ROUND(step3_checkout * 100.0 / step2_cart, 1) AS checkout_rate,
step4_payment,
ROUND(step4_payment * 100.0 / step3_checkout, 1) AS payment_rate
FROM funnel;
WITH first_day AS (
SELECT user_id, MIN(DATE(created_at)) AS first_date
FROM events
GROUP BY user_id
),
retention AS (
SELECT
f.first_date,
DATE(e.created_at) - f.first_date AS day_n,
COUNT(DISTINCT e.user_id) AS retained
FROM events e
JOIN first_day f ON e.user_id = f.user_id
GROUP BY f.first_date, day_n
)
SELECT
first_date,
MAX(CASE WHEN day_n = 0 THEN retained END) AS d0,
MAX(CASE WHEN day_n = 1 THEN retained END) AS d1,
MAX(CASE WHEN day_n = 7 THEN retained END) AS d7,
MAX(CASE WHEN day_n = 30 THEN retained END) AS d30
FROM retention
GROUP BY first_date
ORDER BY first_date;
-- 排名
SELECT user_id, amount,
RANK() OVER (ORDER BY amount DESC) AS rank
FROM orders;
-- 累计
SELECT date, revenue,
SUM(revenue) OVER (ORDER BY date) AS cumulative
FROM daily_revenue;
-- 移动平均(7日)
SELECT date, revenue,
AVG(revenue) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS ma7
FROM daily_revenue;
templates/sql-analysis-template.md — SQL 分析记录模板□ 问题明确
□ 数据源正确
□ 时区处理
□ 排除异常
□ 性能可接受
□ 结果可解释
□ CTE 可读
上游:metric-design → 指标定义
下游:data-visualization → 图表展示
下游:analysis-report → 纳入报告