云上数据联表:先确认一条记录会匹配几条
在华为云 RDS 等云数据库中编写报表时,经常需要把订单、商品明细和客户信息关联起来。查询能够执行,不代表统计结果正确。如果一笔订单匹配多条明细,订单金额就会在结果中出现多次,直接求和可能放大总额。
一、先看关联关系
订单表通常每笔订单一行,明细表则可能每件商品一行。两表按订单编号关联后,一笔订单对应多行是正常现象。写查询前,应明确关联键是否唯一、是否允许为空,以及双方是一对一还是一对多。如果两侧同一个键都出现多次,匹配组合还会进一步增加。
二、让汇总符合业务粒度
统计订单数与统计商品行数,需要不同的计数口径。订单总金额也不能在每条明细上重复累加。可以先在订单层面完成订单指标统计,或把明细按订单编号汇总到每笔订单一行后再关联。具体做法取决于报表需要表达的对象,不能仅凭结果行数决定。
三、明确未匹配记录的去留
内连接通常只保留能够匹配的记录,左连接可以保留左侧未匹配的记录。但在左连接之后,若在 WHERE 中要求右表字段满足某个值,未匹配行可能被过滤。条件放在哪里,应由业务需求决定,并检查空值如何影响计数和筛选,避免漏掉没有明细的订单。
四、用小样本检查结果
准备没有明细、一条明细和多条明细的订单,逐笔核对关联后的行数、订单数与金额。遇到重复时,先检查匹配关系,不要直接增加 DISTINCT 掩盖问题;不同业务记录也可能具有相同的显示字段,盲目去重会误删有效结果。还应抽查重复键和未匹配键的来源。
联表查询的关键,是知道每一步的“一行”代表什么。先说明匹配关系,再确定汇总位置,最后核对样本,可以让云上报表的数字更容易解释,也方便后续修改查询时检查影响。
- 点赞
- 收藏
- 关注作者
评论(0)