返回文章列表
数据分析示例文章

一条 JOIN,让报表里的收入翻了一倍

SQL 能跑通,不代表结果正确。从一对多关联说起,记录一次常见的数据重复统计问题。

问题出在统计粒度

订单表一行是一笔订单,订单明细表一行是一个商品。直接关联之后,同一笔订单的金额会随着明细重复出现。

先看行数,再看汇总

sql
SELECT COUNT(*) FROM orders;
SELECT COUNT(*)
FROM orders o
JOIN order_items i ON i.order_id = o.id;

行数增加不一定是错误,但它提醒我们:关联后的粒度已经改变了。

按正确的粒度计算

订单总额应在订单粒度汇总。不能简单用 SUM(DISTINCT amount),因为不同订单可能恰好金额相同。

验证习惯

  • 选几笔订单手算。
  • 对比关联前后的主键数量。
  • 检查分组结果是否能回到总量。
  • 记录金额、退款和时间范围的口径。
© 2026 码间 · 保持好奇,持续记录。写作后台