用于编写和执行 SQL 查询 - 支持多维度分析、多条 SQL 协同、智能图表推荐
当您需要通过编写和执行 SQL 查询来回答问题时应使用此技能。
对于涉及单个表的直接问题:
sql_db_schema 查看列sql_db_query 运行对于需要多个表的问题:
使用 write_todos 分解任务:
对每个表使用 sql_db_schema 查找连接列和所需字段。一次传入多表名,减少调用。
使用 sql_db_table_relationship 获取表间外键关系,确保 JOIN 条件正确。
检查所有 JOIN 都有条件,GROUP BY 正确,然后运行查询。
o for orders, p for products)。yyyy-MM-dd HH:mm:ssyyyy-MM-ddyyyy-MM根据用户问题复杂度,可以生成多条 SQL,分别获取不同维度的数据:
| 场景 | 策略 |
|---|---|
| 趋势+归因分析 | SQL1: 时间维度趋势数据;SQL2: 分类维度归因数据 |
| 综合报告 | SQL1: 汇总 KPI;SQL2: 趋势数据;SQL3: 排名/Top N |
| "为什么"类问题 | SQL1: 总体趋势确认变化;SQL2: 按维度分解贡献 |
| 对比分析 | SQL1: 当前周期数据;SQL2: 对比周期数据 |
根据用户问题,自动判断需要哪些维度的查询:
为每条 SQL 标注用途和推荐图表类型,便于后续报告生成:
查询 1:获取月度趋势数据
推荐图表:折线图/面积图
SQL: SELECT ...
查询 2:获取各品类占比
推荐图表:饼图/环形图
SQL: SELECT ...
| 数据特征 | 推荐图表 | 说明 |
|---|---|---|
| 时间序列 | 折线图/面积图 | 展示趋势变化 |
| 分类排名 | 水平柱状图 | Top N 排名展示 |
| 占比结构 | 饼图/环形图 | 各分类占比 |
| 多维对比 | 分组柱状图 | 不同组间指标对比 |
| 变化归因 | 瀑布图 | 各维度对变化的贡献 |
| 趋势+量 | 双轴图 | 柱线组合,展示量和率 |
| 综合评估 | 雷达图 | 多维度能力画像 |
| 增长率分析 | 折线图+数据标签 | 环比/同比变化 |
| 帕累托分析 | 组合图(柱状+累积线) | 头部集中度分析 |
| 异常检测 | 折线图+红色标注 | 偏离均值的异常值 |
SELECT
c.Country,
ROUND(SUM(i.Total), 2) as TotalRevenue
FROM Invoice i
INNER JOIN Customer c ON i.CustomerId = c.CustomerId
GROUP BY c.Country
ORDER BY TotalRevenue DESC
LIMIT 10;
用户问题: "分析今年的月度销售趋势,为什么8月特别高?"
查询 1:月度趋势
SELECT
DATE_FORMAT(order_date, '%Y-%m') as month,
ROUND(SUM(amount), 2) as total_sales,
COUNT(*) as order_count
FROM orders
WHERE YEAR(order_date) = 2024
GROUP BY DATE_FORMAT(order_date, '%Y-%m')
ORDER BY month ASC;
推荐图表:面积折线图
查询 2:8月品类分解归因
SELECT
p.category,
ROUND(SUM(o.amount), 2) as sales,
COUNT(*) as order_count
FROM orders o
JOIN products p ON o.product_id = p.id
WHERE DATE_FORMAT(o.order_date, '%Y-%m') = '2024-08'
GROUP BY p.category
ORDER BY sales DESC;
推荐图表:水平柱状图
查询 3:8月 vs 7月品类对比
SELECT
p.category,
ROUND(SUM(CASE WHEN DATE_FORMAT(o.order_date, '%Y-%m') = '2024-08' THEN o.amount ELSE 0 END), 2) as aug_sales,
ROUND(SUM(CASE WHEN DATE_FORMAT(o.order_date, '%Y-%m') = '2024-07' THEN o.amount ELSE 0 END), 2) as jul_sales,
ROUND(SUM(CASE WHEN DATE_FORMAT(o.order_date, '%Y-%m') = '2024-08' THEN o.amount ELSE 0 END) -
SUM(CASE WHEN DATE_FORMAT(o.order_date, '%Y-%m') = '2024-07' THEN o.amount ELSE 0 END), 2) as diff
FROM orders o
JOIN products p ON o.product_id = p.id
WHERE DATE_FORMAT(o.order_date, '%Y-%m') IN ('2024-07', '2024-08')
GROUP BY p.category
ORDER BY diff DESC;
推荐图表:瀑布图/堆叠柱状图