SQL面试题更新 2026-08-05

请编写一条SQL语句,统计每位客户的订单总数量和订单总金额,结果需要按照总金额从高到低排列,该如何实现?

编码实现技术原理SQL

考察说明

考察SQL聚合查询与排序的基本能力,以及GROUP BY和ORDER BY的正确使用。

回答思路

  1. 【回答框架 1】核心是使用GROUP BY按客户分组,配合聚合函数SUM和COUNT统计总金额和总数量。基本语句为SELECT customer_id, COUNT(order_id) AS total_orders, SUM(amount) AS total_amount FROM orders GROUP BY customer_id。
  2. 【回答框架 2】排序使用ORDER BY total_amount DESC,注意别名可以在ORDER BY中使用,但最好保持一致性。如果要求金额取整或格式化,可在外层查询处理。
  3. 【回答框架 3】若需要显示客户名称而非ID,需JOIN客户表,此时注意分组字段应包含客户名称,否则可能报错或结果不准确。
  4. 【回答框架 4】考虑性能问题:大数据量下建议对customer_id加索引,避免全表扫描;若orders表极大,可考虑汇总表或物化视图。
  5. 【关键点 1】使用GROUP BY按客户分组,COUNT统计订单数,SUM统计总金额。
  6. 【关键点 2】ORDER BY total_amount DESC实现降序排序。
  7. 【关键点 3】若关联客户表,SELECT中的非聚合字段需在GROUP BY中列出。
  8. 【易错点 1】错误使用WHERE过滤聚合结果,正确应使用HAVING。
  9. 【易错点 2】遗漏GROUP BY导致全表当成一组,结果错误。
  10. 【易错点 3】排序字段未使用别名或列位置,可能导致歧义。