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

Snowflake SQL问题:如何筛选购买过X产品且同时购买Y产品的客户

解决同时购买X/Y类产品的客户查询问题

原查询返回空结果的核心原因:WHERE子句要求同一条销售记录的product_no同时属于X和Y产品列表,但题目明确X、Y产品无重合,这个条件永远无法满足,因此返回空。

以下是三种可行的Snowflake SQL解决方案:

方法1:分组聚合+Having筛选

通过分组统计客户的购买记录,判断其是否同时购买过X和Y类产品:

SELECT s.cust
FROM sales s
INNER JOIN product p ON s.product_no = p.product_no
WHERE s.product_no IN (SELECT X_product_no FROM X_product_list)
   OR s.product_no IN (SELECT Y_product_no FROM Y_product_list)
GROUP BY s.cust
HAVING 
    SUM(CASE WHEN s.product_no IN (SELECT X_product_no FROM X_product_list) THEN 1 ELSE 0 END) > 0
    AND SUM(CASE WHEN s.product_no IN (SELECT Y_product_no FROM Y_product_list) THEN 1 ELSE 0 END) > 0;

方法2:EXISTS子查询验证

分别检查客户是否存在购买X、Y产品的独立记录,适合大数据集(索引优化后性能更优):

SELECT DISTINCT s.cust
FROM sales s
INNER JOIN product p ON s.product_no = p.product_no
WHERE 
    EXISTS (SELECT 1 FROM sales s2 WHERE s2.cust = s.cust AND s2.product_no IN (SELECT X_product_no FROM X_product_list))
    AND EXISTS (SELECT 1 FROM sales s3 WHERE s3.cust = s.cust AND s3.product_no IN (SELECT Y_product_no FROM Y_product_list));

方法3:集合交集取共同客户

先分别筛选购买过X、Y产品的客户,再取两个集合的交集:

SELECT cust FROM (
    SELECT DISTINCT s.cust
    FROM sales s
    INNER JOIN product p ON s.product_no = p.product_no
    WHERE s.product_no IN (SELECT X_product_no FROM X_product_list)
) x_customers
INTERSECT
SELECT cust FROM (
    SELECT DISTINCT s.cust
    FROM sales s
    INNER JOIN product p ON s.product_no = p.product_no
    WHERE s.product_no IN (SELECT Y_product_no FROM Y_product_list)
) y_customers;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:40:33