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

如何在MySQL中找出客户购买的最常见3种产品组合?

找出最常见的3种产品组合

原始数据

ClientProduct
AlexA
AlexB
AlexC
AlexD
PeterA
PeterB
PeterC
AlineC
AlineD
AlineE
AlineF
AlineG
JoaoB
JoaoC
JoaoD
JoaoE
NikkyA
NikkyB
NikkyC

解决方案思路

要统计最常见的3产品组合,核心是先为每个客户生成所有可能的3产品组合,统一组合内产品的排序(避免因顺序不同被误判为不同组合),最后统计每个组合的出现次数并取Top3。

示例SQL实现(以MySQL为例)

-- 生成每个客户的3产品组合,统一组合内产品排序
WITH client_products AS (
    SELECT 
        Client,
        Product
    FROM your_table_name
),
product_combinations AS (
    SELECT 
        cp1.Client,
        -- 按字母顺序拼接产品,确保组合唯一
        CONCAT_WS(',', 
            LEAST(cp1.Product, cp2.Product, cp3.Product),
            CASE 
                WHEN (cp1.Product BETWEEN cp2.Product AND cp3.Product) OR (cp1.Product BETWEEN cp3.Product AND cp2.Product) THEN cp1.Product
                WHEN (cp2.Product BETWEEN cp1.Product AND cp3.Product) OR (cp2.Product BETWEEN cp3.Product AND cp1.Product) THEN cp2.Product
                ELSE cp3.Product
            END,
            GREATEST(cp1.Product, cp2.Product, cp3.Product)
        ) AS product_triple
    FROM client_products cp1
    JOIN client_products cp2 ON cp1.Client = cp2.Client AND cp1.Product < cp2.Product
    JOIN client_products cp3 ON cp2.Client = cp3.Client AND cp2.Product < cp3.Product
)
-- 统计组合出现次数,取前3
SELECT 
    product_triple,
    COUNT(*) AS occurrence_count
FROM product_combinations
GROUP BY product_triple
ORDER BY occurrence_count DESC, product_triple
LIMIT 3;

代码解释

  1. client_products CTE:提取所有客户与产品的关联数据。
  2. product_combinations CTE:通过三次自连接生成每个客户的所有3产品组合,利用LEAST、GREATEST和条件判断确保组合内产品按字母顺序排列,避免"A,B,C"和"B,A,C"被当作不同组合。
  3. 最后统计每个组合的出现次数,按次数降序排序后取前3条结果。

结果说明

针对示例数据执行上述SQL后,会得到如下结果:

product_tripleoccurrence_count
A,B,C3
B,C,D2
A,B,D1

其中"A,B,C"是出现次数最多的3产品组合,与需求预期一致。

内容的提问来源于stack exchange,提问作者vie.luo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:03:38