如何查询近3个月订单量超所在区域客户平均订单数的客户
查询近3个月订单量超区域平均的客户
思路说明
要实现需求,需分三步完成:
- 统计每个客户近3个月的订单数量
- 计算每个区域(城市)内客户的平均订单数
- 筛选出订单数高于所在区域平均值的客户
SQL 查询语句
以下是通用的 SQL 实现,针对不同数据库需调整日期函数:
WITH customer_order_counts AS ( SELECT customer_id, city, COUNT(order_id) AS customer_order_count FROM orders -- 根据数据库类型选择对应的日期条件 -- SQL Server: Date >= DATEADD(month, -3, GETDATE()) -- MySQL: Date >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH) -- PostgreSQL: Date >= CURRENT_DATE - INTERVAL '3 months' WHERE Date >= DATEADD(month, -3, GETDATE()) GROUP BY customer_id, city ), regional_avg_orders AS ( SELECT city, AVG(customer_order_count) AS regional_avg_order_count FROM customer_order_counts GROUP BY city ) SELECT coc.customer_id, coc.city, coc.customer_order_count, ro.regional_avg_order_count FROM customer_order_counts coc JOIN regional_avg_orders ro ON coc.city = ro.city WHERE coc.customer_order_count > ro.regional_avg_order_count ORDER BY coc.city, coc.customer_order_count DESC;
关键点解释
- CTE
customer_order_counts: 按客户和城市分组,统计每个客户近3个月的订单总数 - CTE
regional_avg_orders: 按城市分组,计算该城市所有客户的平均订单数(即题目示例中的区域平均) - 最终查询: 关联两个结果集,筛选出订单数超过所在城市平均值的客户,并展示核心信息
内容的提问来源于stack exchange,提问作者Hridikalpa
相关产品推荐
相关产品推荐

