You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选出购买次数超过1次的客户的关联销售数据?

解决方法

你之前的代码问题在于:使用case语句只是新增了一个条件判断字段,并没有过滤掉不符合条件的记录,所以结果仍然包含所有客户的数据。以下是几种正确的实现方式:

方式一:IN子查询过滤

SELECT *
FROM sales s
JOIN closest_dealerships cd ON s.customer_id = cd.customer_id
WHERE s.customer_id IN (
    SELECT customer_id
    FROM sales
    GROUP BY customer_id
    HAVING COUNT(*) > 1
)
ORDER BY s.customer_id;

逻辑:先从sales表中筛选出购买次数超过1次的客户ID列表,再用这个列表过滤关联后的结果,只保留目标客户的全部记录。

方式二:EXISTS子查询(推荐大表使用)

SELECT *
FROM sales s
JOIN closest_dealerships cd ON s.customer_id = cd.customer_id
WHERE EXISTS (
    SELECT 1
    FROM sales s2
    WHERE s2.customer_id = s.customer_id
    GROUP BY s2.customer_id
    HAVING COUNT(*) > 1
)
ORDER BY s.customer_id;

逻辑:逐行检查当前记录的客户ID是否存在于“购买次数>1”的分组中,存在则保留该记录,性能通常优于IN子查询(尤其数据量大时)。

方式三:CTE预筛选客户(逻辑更清晰)

WITH repeat_customers AS (
    SELECT customer_id
    FROM sales
    GROUP BY customer_id
    HAVING COUNT(*) > 1
)
SELECT s.*, cd.*
FROM repeat_customers rc
JOIN sales s ON rc.customer_id = s.customer_id
JOIN closest_dealerships cd ON rc.customer_id = cd.customer_id
ORDER BY s.customer_id;

逻辑:先用CTE定义出重复购买的客户集合,再与sales和closest_dealerships表关联,代码可读性更强。


内容的提问来源于stack exchange,提问作者New Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:05:25