关于SQL JOIN中ON子句Cur.orderyear=Prv.orderyear+1的作用疑问
解析ON子句
Cur.orderyear = Prv.orderyear + 1的逻辑 首先纠正一个误区:ON子句不是只能做等值匹配,它支持任何能返回布尔值(真/假)的条件,这个等式就是用来把「当前年份的记录」和「上一年的记录」关联起来的。
你之前搞反了等式的推导方向:当Cur的orderyear是2021时,等式2021 = Prv.orderyear + 1的解是Prv.orderyear = 2020——也就是说,这条2021年的Cur记录,会匹配Prv子查询里所有orderyear为2020的记录。
举个实际场景的例子:
- Cur子查询统计了2021年的客户数、订单量等数据
- Prv子查询统计了2020年的对应数据
通过这个ON条件,就能把两年的数据行一对一关联起来,这样你就能直接计算「2021年客户数 - 2020年客户数」的同比增量,或者做增长率计算。
另外用LEFT OUTER JOIN的原因是:如果Cur里存在最早的年份(比如2019年,而Prv里没有2018年的数据),这时候Prv对应的字段会返回NULL,你可以在后续计算里把这种情况处理为同比增长为0,或者单独标记出来。
内容的提问来源于stack exchange,提问作者wenn32
相关产品推荐
相关产品推荐

