请写出一条 SQL 语句,用于统计订单数量大于 5 的每位客户各自的订单总数,并输出客户及其对应的订单数量。
考察说明
考查对 SQL 分组聚合与分组后过滤(HAVING)的运用能力。
回答思路
- 【回答框架 1】使用 SELECT 选出客户标识(如 customer_id)和订单数量 COUNT(*),从订单表读取数据。
- 【回答框架 2】通过 GROUP BY 客户标识对每个客户的订单进行分组,使聚合函数作用于每组。
- 【回答框架 3】用 HAVING COUNT(*) > 5 过滤分组结果,保留订单数量超过 5 的客户;注意 WHERE 无法用于聚合后的条件。
- 【回答框架 4】最终结果按需求展示客户标识和订单数量,必要时可增加 ORDER BY 排序。
- 【回答框架 5】若订单表存在多个订单行(如明细行),需根据实际表结构确认是否要用 COUNT(DISTINCT 订单号) 避免重复计数。
- 【关键点 1】GROUP BY 负责按客户分组,COUNT(*) 统计每组行数。
- 【关键点 2】HAVING 用于过滤聚合结果,条件为 COUNT(*) > 5。
- 【关键点 3】WHERE 在分组前过滤,不能替代 HAVING 聚合后条件。
- 【易错点 1】误用 WHERE COUNT(*) > 5 会语法错误,因为 WHERE 不能引用聚合函数。
- 【易错点 2】若客户标识字段为 NULL,分组会单独成组,需确认是否计为有效客户。
- 【易错点 3】若订单表含多条明细行,直接 COUNT(*) 可能高估订单数,需按订单主键去重。