请编写一条 SQL 语句,用于查询所有订单中商品的总数量和总金额,并将查询结果按照订单日期的升序进行排列。
考察说明
考查 SQL 聚合函数(SUM)与 ORDER BY 排序的结合使用,以及分组与排序的理解。
回答思路
- 【回答框架 1】明确需求:需要针对所有订单,分别计算总商品数量和总金额,不涉及按订单分组,而是整体聚合。聚合函数 SUM(quantity) 和 SUM(amount) 可分别求得总数量与总金额。
- 【回答框架 2】SQL 结构:SELECT SUM(quantity) AS total_quantity, SUM(amount) AS total_amount FROM orders ORDER BY order_date ASC。若需要展示订单日期,则需将 order_date 加入 GROUP BY,并使其出现在 SELECT 中。
- 【回答框架 3】关键点:聚合查询中,若 SELECT 包含非聚合列,则必须使用 GROUP BY,否则只能出现在聚合函数内。ORDER BY 在使用 GROUP BY 时,一般可引用分组字段或聚合结果。
- 【回答框架 4】本题直接对全表聚合,不使用 GROUP BY,此时结果为一行,排序无实际意义;但若题目要求按日期排序,则需调整粒度,比如按订单分组,此时应使用 GROUP BY order_date 或订单维度,再对每组求和。
- 【回答框架 5】若订单表存在多行表示订单明细,可能需要先按订单汇总,再按日期排序,此时需嵌套查询或使用窗口函数,但简单场景下直接聚合即可。
- 【关键点 1】SQL 聚合函数 SUM 用于求和,可与 GROUP BY 配合实现分组汇总。
- 【关键点 2】使用 GROUP BY 时,SELECT 中的列必须要么参与分组,要么包裹在聚合函数中。
- 【关键点 3】ORDER BY 默认升序,可用 ASC 显式指定。
- 【关键点 4】无 GROUP BY 时,聚合查询返回单行结果,排序无效。
- 【关键点 5】若需按日期排序且展示日期,需将 order_date 放入 GROUP BY。
- 【易错点 1】误将所有订单的日期也放入 SELECT 而不加 GROUP BY,导致 SQL 报错。
- 【易错点 2】忽略聚合查询中 SELECT 列与 GROUP BY 的约束,导致语义错误。
- 【易错点 3】认为 ORDER BY 必然会影响聚合结果顺序,错误理解单行聚合排序无意义。