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

MySQL按客户分组查询最受欢迎商品的实现问题求助

解决每个客户最受欢迎商品的SQL查询问题

你的原查询逻辑存在问题:子查询计算的是全局所有产品的购买次数最大值,而非每个客户各自的最大购买频次,因此无法正确关联到每个客户的分组数据。以下是正确的解决方案:

方案思路

  1. 先统计每个客户对每个产品的购买次数;
  2. 给每个客户的产品按购买次数降序排名;
  3. 筛选出排名第一的产品,关联菜单表获取产品名称。

最终SQL代码

WITH CustomerProductCounts AS (
    -- 统计每个客户每个产品的购买次数
    SELECT 
        customer_id,
        product_id,
        COUNT(*) AS purchase_count
    FROM Sales
    GROUP BY customer_id, product_id
),
RankedProducts AS (
    -- 给每个客户的产品按购买次数降序排名
    SELECT 
        customer_id,
        product_id,
        purchase_count,
        ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY purchase_count DESC) AS rank_num
    FROM CustomerProductCounts
)
-- 关联菜单表,筛选排名第一的产品
SELECT 
    rp.customer_id,
    m.product_name
FROM RankedProducts rp
JOIN Menu m ON rp.product_id = m.product_id
WHERE rp.rank_num = 1;

补充说明

  • 如果需要支持并列最受欢迎的场景(比如某个客户有多个购买次数相同的高频产品),只需将ROW_NUMBER()替换为RANK()即可,这样相同购买次数的产品都会被保留。
  • 原查询中无需额外计算maxFreq,通过窗口函数可以直接完成每个客户内部的排名筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:40:11