数据分析示例文章
一条 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),因为不同订单可能恰好金额相同。
验证习惯
- 选几笔订单手算。
- 对比关联前后的主键数量。
- 检查分组结果是否能回到总量。
- 记录金额、退款和时间范围的口径。