先说明每行仍是什么
设客户A有三张订单,按日期和唯一订单号排列,金额依次20、30、10。我们希望在保留三张订单的同时显示累计金额20、50、60,这不是把三行汇成一行的GROUP BY任务。
窗口函数在相关行上计算结果,并把结果带回每条输出行。先声明最终要一行一订单,才能判断应该用分组聚合还是窗口函数。
写出分区、顺序与窗口
可研究SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date, order_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)。分区决定每位客户重新累计,ORDER BY决定先后,ROWS窗口决定累计范围。
若同一天多张订单却没有稳定的次序键,逐单累计的显示顺序可能不符合预期。某些默认窗口会包含排序值相同的同级行,不能把默认行为当作逐行累计。
检查筛选发生在哪一层
若只想展示累计金额大于40的订单,通常需先在子查询中计算窗口值,再在外层筛选。不要以为同一查询层的WHERE已经能直接使用尚未计算的窗口结果。
自练:加客户B一张订单7,确认B的累计从7开始;再加A同一天另一张订单5,用唯一订单号确定次序。写下预期表后再执行,检查行数、分区和重复排序值。
参考资料
下一步
如需大学专业课程或 Tutorial 学习支持,请在咨询中填写模块名称、学习目标和已尝试的步骤。具体教学安排须确认,计分作业由学生独立完成。
