SQL中是否必须用CASE语句实现客户订单分桶分组统计
问题答复
这类按客户订单数量划分统计分桶的操作不是必须使用CASE语句实现。
你当前编写的代码仅完成了第一层聚合:按客户ID分组统计维度,没有完成第二层按订单数统计对应客户数的聚合,因此无法得到预期结果。
你的需求逻辑分为两步:
- 先统计每个客户对应的总订单数量
- 再按统计出的订单数量分组,计数每个订单数档位对应的客户总量
正确实现SQL
SELECT COUNT(CustomerID) AS `# of Customers`, customer_order_count AS `# of Orders` FROM ( -- 第一层聚合:计算每个客户的总订单数 SELECT CustomerID, COUNT(Order_date) AS customer_order_count FROM Table1 GROUP BY CustomerID ) AS customer_order_stat GROUP BY customer_order_count ORDER BY customer_order_count;
逻辑说明
针对你给出的样例数据,第一层子查询执行后会得到每个客户的订单数:
- 客户ID 1:1笔订单
- 客户ID 2:2笔订单
- 客户ID 3:1笔订单
外层查询按订单数分组计数后,就会输出和你预期完全一致的结果:订单数为1的客户共2个,订单数为2的客户共1个。
注:只有当你需要按自定义区间划分分桶时(例如将订单数划分为「1单」「2-3单」「4单及以上」这类非精确值匹配的档位),才需要使用CASE语句自定义分桶规则,当前按精确订单数统计的场景无需使用CASE。
内容的提问来源于stack exchange,提问作者user12101044
相关产品推荐
相关产品推荐

