请编写一条SQL语句,统计每位客户的订单总数量和订单总金额,结果需要按照总金额从高到低排列,该如何实现?
考察说明
考察SQL聚合查询与排序的基本能力,以及GROUP BY和ORDER BY的正确使用。
回答思路
- 【回答框架 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】排序使用ORDER BY total_amount DESC,注意别名可以在ORDER BY中使用,但最好保持一致性。如果要求金额取整或格式化,可在外层查询处理。
- 【回答框架 3】若需要显示客户名称而非ID,需JOIN客户表,此时注意分组字段应包含客户名称,否则可能报错或结果不准确。
- 【回答框架 4】考虑性能问题:大数据量下建议对customer_id加索引,避免全表扫描;若orders表极大,可考虑汇总表或物化视图。
- 【关键点 1】使用GROUP BY按客户分组,COUNT统计订单数,SUM统计总金额。
- 【关键点 2】ORDER BY total_amount DESC实现降序排序。
- 【关键点 3】若关联客户表,SELECT中的非聚合字段需在GROUP BY中列出。
- 【易错点 1】错误使用WHERE过滤聚合结果,正确应使用HAVING。
- 【易错点 2】遗漏GROUP BY导致全表当成一组,结果错误。
- 【易错点 3】排序字段未使用别名或列位置,可能导致歧义。