资料与文件 · 实作指南
AI 销售报表里的三行,可能只有两笔订单
用一组已运行的合成订单实验,看看连接明细为什么会重复计算订单金额,以及按金额去重为什么也会算错。
AAHouse 原创解说视频,采用 AI 辅助概念画面、合成旁白及原创音乐。
英文逐字稿 · 简体中文普通话逐字稿 · 台湾华语逐字稿 · 澳门粤语逐字稿
一笔订单,为什么出现两次
给 AI 一份订单表和一份明细表,请它生成销售摘要。以下是虚构的美国工作室数据,金额均为美元:订单 A 总额 100,有两项商品;订单 B 总额 60,有一项商品。真实的订单总额是 160。把两张表连接后,结果有三行。如果再把每行的订单总额相加,就会得到 260。模型不必编造任何数字,也能写出错误结论。

- A:$100 → 商品 1、商品 2
- B:$60 → 商品 3
- 订单合计:$160
原创示意图 · 合成数据,非真实业务结果
问题藏在“一行代表什么”
订单表一行代表一笔订单,明细表一行代表一项商品。PostgreSQL 文档说明,内连接会为左表中的一行生成每个满足条件的右表匹配行。[1] 因此 A 的 100 出现两次,是连接规则的结果,不是两笔收入。让 AI 写查询前,先把目标写成“每笔订单计一次”,而不是笼统的“汇总这些表”。

- A / 商品 1 / $100
- A / 商品 2 / $100
- B / 商品 3 / $60
- 错误加总:$260
原创示意图 · 合成数据,非真实业务结果
别用一个 DISTINCT 掩盖问题
只按金额去重不是修复。再加入订单 C,总额也是 100,却是另一笔真实订单。正确总额变成 260;SUM(DISTINCT 订单总额) 只保留 100 和 60,仍得到 160。文档中的 DISTINCT 针对表达式值去重,不理解订单身份。[2] 去重键必须对应业务对象,不能因为两个金额相同就把其中一笔删掉。

- 真实订单:A $100 + B $60 + C $100
- 正确:$260
- 按金额去重:$100 + $60 = $160
原创示意图 · 合成数据,非真实业务结果
先选统计层级,再补充明细
如果只问订单总额,直接汇总订单表即可。若需要商品数量等明细指标,先按订单编号把明细聚合成每单一行,再连接回订单表。我们的建议是分别核对订单总额与商品数量,避免把订单级金额分配到各商品后却没有明确规则。这里讨论报表口径,不是会计或税务确认方法。

- 订单表 → 每单一次 → 金额合计
- 明细表 → 按订单编号聚合 → 商品数量
- 再连接:每笔订单最多一行汇总
原创示意图 · 合成数据,非真实业务结果
用三张订单做验收,不靠流畅解释
把 A、B、C 留作小型固定测试:应有三笔订单、四项明细、总额 260。还应加入没有明细的订单,检查是否要保留,以及退款、取消、日期范围的明确规则。本文已在本地 SQLite 上运行这组合成数据实验,验证了重复加总和金额去重两种错误;没有连接任何商家数据库,也未测试生产查询。

- 订单数:3
- 明细行数:4
- 订单总额:$260
- 三项一起核对
原创示意图 · 合成数据,非真实业务结果
交给 AI 的下一句话
可以要求:“先说明每张表和最终结果的一行代表什么,再给出查询,并用固定测试核对订单数、明细数和总额。”让 AI 帮忙解释差异与生成测试,但由业务负责人确认统计口径。报告上线前保存查询版本、输入范围和验收结果;一张算得对的小表,比一段听起来合理的销售分析更有说服力。

- 一行是什么?订单还是商品?
- 哪些订单在统计范围内?
- 空明细、退款、取消如何处理?
原创示意图 · 合成数据,非真实业务结果