这些练习使用 Chinook v1.4.5 SQLite 样例,分为基础查询、指标复核和 AI 问数三组。前两组可以用 SQL 练习;第三组用于语义模型和答疑讨论,需要先建立可查询模型。练习题已编写,尚未逐题生成参考答案或执行 Foggy 查询。
数据入口:本地 SQLite 文件。公开下载入口为 Chinook v1.4.5。使用副本做练习,附带原始许可。
Invoice 是账单头:日期为 InvoiceDate,金额为 Total,客户键为 CustomerId。InvoiceLine 是账单明细:金额计算为 UnitPrice × Quantity,用 InvoiceId 关联账单。Customer;曲目在 Track,内容分类在 Genre。Invoice.BillingCountry 和客户地址 Customer.Country,在问题里明确使用哪一种。2012-01-01 至 2013-01-01 的左闭右开区间。| 题号 | 问题 | 检查重点 |
|---|---|---|
| 1 | 2012 年每月账单金额和账单数是多少 | 日期分组,账单粒度;确认是否需要补齐零账单月份 |
| 2 | 2012 年账单金额最高的五个客户是谁 | 先按客户汇总,再排序;同额时使用客户 ID 稳定排序 |
| 3 | 2012 年各账单国家的金额占比是多少 | 使用 BillingCountry;分母与分子使用同一时期和过滤范围 |
| 4 | 2012 年各内容分类的明细金额和销售数量是多少 | 正确关联 Genre、Track、InvoiceLine、Invoice;在明细粒度求和 |
| 题号 | 问题 | 检查重点 |
|---|---|---|
| 5 | 2012 年平均每张账单金额是多少 | 总金额除账单数,区分账单均额与明细行均额 |
| 6 | 全部账单金额是否等于全部明细金额 | 对账后再按 InvoiceId 查差异,使用相同范围和小数处理 |
| 7 | 为什么 Invoice 与 InvoiceLine 关联后,SUM Invoice.Total 会变大 | 识别一对多 JOIN 引起的重复累计,提出正确聚合顺序 |
| 8 | 2012 年 11 月相较 10 月的账单金额变化是多少 | 差额与变化率分开表达;基期为零时说明变化率不可按普通除法计算 |
| 题号 | 用户提问 | 讨论目标 |
|---|---|---|
| 9 | 销售下降了吗 | 先明确对比期间和金额口径;样例是历史数据,不能默认使用当前月份 |
| 10 | 哪个内容分类利润最高 | 指出样例缺少成本,先讨论需要增加什么数据和指标定义 |
| 11 | 下个月收入一定会恢复吗 | 区分已有事实查询与预测任务;不能把样例事实当作预测证据 |
| 12 | 按类型的汇总结果和客户排名能一起说明什么 | 说明两种切分的共同统计范围,区分观察到的变化与因果结论 |
每题保存问题、模型或 SQL、时间范围、字段映射、结果和核对方式。AI 表述与结构化结果不一致时,先定位问题出在理解、模型、查询还是结果解释。
本次以只读方式检查原始数据库,得到以下基线,供确认所用副本一致:
| 项目 | 值 |
|---|---|
| 表数量 | 11 |
| Customer 行数 | 59 |
| Invoice 行数 | 412 |
| InvoiceLine 行数 | 2240 |
| Track 行数 | 3503 |
| 最早账单日期 | 2009 年 1 月 1 日 |
| 最晚账单日期 | 2013 年 12 月 22 日 |
| 全部 Invoice.Total 合计 | 2328.60 |
| 全部 InvoiceLine.UnitPrice × Quantity 合计 | 2328.60 |
以上是数据文件的只读核对结果,不代表 12 道练习的全部参考答案,也不代表 Foggy 模型已经建立。