SQL面试题更新 2026-08-03

请编写一条 SQL 语句,用于查询所有订单中商品的总数量和总金额,并将查询结果按照订单日期的升序进行排列。

考察说明

考查 SQL 聚合函数(SUM)与 ORDER BY 排序的结合使用,以及分组与排序的理解。

回答思路

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