如何在SQL中带条件使用COUNT:统计购镜后12个月内购沙发的客户
解决方案
正确SQL查询语句
SELECT o1.customer_id, COUNT(o2.order_date) AS cross_sale FROM Orders o1 LEFT JOIN Orders o2 ON o1.customer_id = o2.customer_id AND o2.product = 'sofa' AND o2.order_date > o1.order_date AND o2.order_date <= ADD_MONTHS(o1.order_date, 12) WHERE o1.product = 'mirror' GROUP BY o1.customer_id
关键逻辑说明
- 仅聚焦购买过镜子的客户:通过
WHERE o1.product = 'mirror'筛选出所有镜子订单记录 - 精准匹配符合时间范围的沙发订单:JOIN条件中明确限定:
- 必须是同一客户的沙发订单
- 沙发订单发生在镜子订单之后
- 沙发订单不晚于镜子订单日期加12个月(用
ADD_MONTHS函数实现跨12个月的时间范围判断,适配Oracle日期处理逻辑)
- 统计并去重:按客户ID分组,用
COUNT(o2.order_date)统计有效沙发订单数,LEFT JOIN确保无符合条件订单的客户也会显示0
示例数据执行结果
| customer_id | cross_sale |
|---|---|
| 234324 | 1 |
| 734938 | 0 |
内容的提问来源于stack exchange,提问作者Lital
相关产品推荐
相关产品推荐

