Oracle SQL按颜色统计2010、2016年后苹果销量结果不符合预期
问题诊断与解决方案
原代码问题点
- 逻辑顺序错误:将日期条件判断放在了聚合求和之后,先对同颜色所有销量求和,再判断单条记录的日期是否符合要求,会导致同颜色产生多条不同结果的记录,空值行也因此产生
- 窗口函数+distinct的组合不合理:该需求属于按维度统计多条件指标的场景,不需要用窗口函数去重,反而会增加额外的计算开销和结果冗余
修正后的代码
SELECT Color, SUM(CASE WHEN WHN >= TO_DATE('01/01/2010','mm/dd/yyyy') THEN Apple ELSE 0 END) AS tot_2010, SUM(CASE WHEN WHN >= TO_DATE('01/01/2016','mm/dd/yyyy') THEN Apple ELSE 0 END) AS tot_2016 FROM temp GROUP BY Color;
逻辑说明
- 先用
GROUP BY Color将所有销售记录按苹果颜色分组,每组对应一种颜色的全量销售数据 - 聚合函数
SUM内部嵌套条件判断,仅对符合对应日期区间的销量进行累加,不符合的记录贡献值为0,最终输出的就是对应区间的总销量 - 每种颜色仅输出一条记录,完全匹配预期结果
内容的提问来源于stack exchange,提问作者StackOne
相关产品推荐
相关产品推荐

