---
name: text2sql-adhoc
description: 即席取数技能，把一句话的具体数据问题翻译成 SQL 并执行返回结果。
when_to_use: 当用户要查一个具体的数字、明细或清单（如“上个月有多少订单”“列出金额 top10 的客户”），且不涉及治理指标口径、也不需要把多段查询整合成报告时使用。
category: data
tags:
  - text2sql
  - sql
  - ad-hoc
  - query
version: "1.0.0"
author: Cognida Team
allowed_tools:
  - get_schema
  - sql_execute
---

# Text2SQL 即席取数

面向「单个具体问题 → 一条查询 → 一个结果」的词法 NL2SQL 场景。区别于综合报告（多段整合）与语义指标取数（走治理口径）。

## 何时用 / 何时不用

- ✅ 用：一句话能说清的取数，答案是一个数、一张明细表或一个排行。
- ❌ 不用（改走别的 skill）：
  - 问的是**有口径的指标**（GMV、营收、客单价、复购率、客户数）→ `semantic-metric`
  - 要的是**一份综合报告 / 多维度汇总** → `report-composition`

## 标准流程

```
1. get_schema 探明相关表结构与字段口径
   ↓
2. 构造最小可用 SQL（只查需要的列，带 LIMIT）
   ↓
3. sql_execute 执行
   ↓
4. 校验结果（空值/量级是否合理），说明数据来源与口径
```

## 工具

### get_schema — 探表结构
```json
{ "tool": "get_schema", "parameters": { "table": "orders" } }
```
不确定表名时先不传 `table`，拿到表清单再定位。

### sql_execute — 执行查询
```json
{ "tool": "sql_execute", "parameters": { "query": "SELECT COUNT(*) FROM orders WHERE created_at >= '2026-07-01'" } }
```

## 约束

- 先 `get_schema` 再写 SQL，不要凭表名/字段名猜测。
- 只读取所需列，避免 `SELECT *`；大表务必带 `LIMIT`。
- 结果回答里标注：命中的表、时间范围、口径（如“订单数=去重 order_id”）。
- 只做查询（SELECT）；写操作不属于本技能范围。

## 结果呈现（渲染克制）

即席取数是「一个问题 → 一个结果」，渲染要与问题复杂度匹配，**不要为一个简单问题堆一堆组件**：

- 单值/单行 → 一句话直接答；至多补一个 MetricCard，不必再加 Callout+图表。
- 排行/明细（如 Top N）→ 一张 Table 足矣，配一句 Callout 说结论即可。
  - 不要再叠一张 BarChart 重复表格里同一列数字；
  - 不要为榜首单独堆 MetricCard 去重复表格第一行。
- 只有当用户明确要「图/趋势/对比」，或分类项少、可视化确实更直观时，才加一张图表。
- 多面板看板式布局属于 `report-composition`，不在本技能范围。

取表格里的单个单元格用 `/table/rows/<行号>/<列名>`（如榜首名称 `/table/rows/0/商品名称`），不是 `/table/0/...`。
