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

SQL需求:筛选购买相同数量产品且客户组数量匹配的记录

正确解决你的客户记录筛选问题

首先我注意到你的需求描述和期望输出之间有个小歧义:你说要筛选“购买产品数量相同的客户组中客户数≥2”的记录,但你的例子里c5购买数量是1,和c3、c4一样,却被排除了——结合期望输出来看,你实际想要的应该是筛选出那些和至少1个客户购买完全相同产品集合的客户的所有记录(比如c1和c2都买了1、2、3,c3和c4都买了5,而c5只买了3,没有其他客户和他买的一样,所以排除)。

我先对应你的期望输出给出正确的SQL解法:

方法一:按产品集合分组筛选

假设你的表名为customer_products,可以用CTE(公共表表达式)分步实现:

WITH customer_product_groups AS (
    -- 第一步:给每个客户的购买产品生成唯一标识(有序拼接产品ID,确保相同产品集合的客户得到相同字符串)
    SELECT 
        customer_id,
        STRING_AGG(product_id, ',' ORDER BY product_id) AS product_list
    FROM customer_products
    GROUP BY customer_id
),
valid_groups AS (
    -- 第二步:找出有至少2个客户的产品集合
    SELECT product_list
    FROM customer_product_groups
    GROUP BY product_list
    HAVING COUNT(customer_id) >= 2
)
-- 第三步:关联原表,取出所有符合条件的客户记录
SELECT cp.customer_id, cp.product_id
FROM customer_products cp
JOIN customer_product_groups cpg ON cp.customer_id = cpg.customer_id
JOIN valid_groups vg ON cpg.product_list = vg.product_list
ORDER BY cp.customer_id, cp.product_id;

如果确实是按购买数量筛选(修正需求歧义)

如果你真的是要按购买产品数量分组,保留购买数量对应的客户数≥2的那些客户的记录,那SQL会是这样:

WITH customer_purchase_counts AS (
    -- 计算每个客户的购买产品总数
    SELECT customer_id, COUNT(product_id) AS purchase_count
    FROM customer_products
    GROUP BY customer_id
),
valid_counts AS (
    -- 找出有至少2个客户的购买数量分组
    SELECT purchase_count
    FROM customer_purchase_counts
    GROUP BY purchase_count
    HAVING COUNT(customer_id) >= 2
)
SELECT cp.customer_id, cp.product_id
FROM customer_products cp
JOIN customer_purchase_counts cpc ON cp.customer_id = cpc.customer_id
JOIN valid_counts vc ON cpc.purchase_count = vc.purchase_count
ORDER BY cp.customer_id, cp.product_id;

不过这个查询会包含c5的记录,因为他的购买数量1对应的客户数有3个(c3、c4、c5),和你的期望输出不符,所以更推荐第一个方法。

你的原查询问题出在哪

你原来的查询是基于单个product_id去关联其他订单,逻辑是找有相同产品的其他订单,这和你的需求完全不匹配——你的需求是按客户的整体购买情况(产品集合或购买数量)分组筛选,而不是单个产品的重复购买。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:21:23