请写出一条 SQL 语句,用于计算每个客户各自订单的累计总金额,输出结果需按订单日期由早到晚排序。
考察说明
考查对窗口函数尤其是 SUM OVER 按客户分区按日期排序的掌握。
回答思路
- 【回答框架 1】使用窗口函数 SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 可以逐行累加每个客户自己的订单金额,得到累计总金额。
- 【回答框架 2】按订单日期排序时,若同一天有多笔订单,应再指定一个唯一排序键如订单ID,保证累计顺序确定,避免随机累加。
- 【回答框架 3】若要求结果集本身按订单日期升序输出,则可在最外层 ORDER BY order_date 再补充订单ID作为次级排序。
- 【回答框架 4】窗口函数在数据库内计算,性能较高,无需自连接或多次聚合;若需过滤或分组,可在子查询中先处理。
- 【回答框架 5】不同数据库语法一致,但需注意 ORDER BY 子句在窗口中的位置不可省略,否则累计无意义。
- 【关键点 1】使用 SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date) 计算客户内累计金额。
- 【关键点 2】窗口 ORDER BY 需指定稳定次序,同日期时用订单ID辅助。
- 【关键点 3】外层再按 order_date 升序排序满足题目要求。
- 【易错点 1】忘记 PARTITION BY 会对全部订单累计。
- 【易错点 2】同日期多笔订单不指定次级排序会导致累计顺序不确定。
- 【易错点 3】误用 GROUP BY 得到总金额而非累计金额。