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

SQL实现客户购买类别统计及CASE WHEN分组报错处理

需求实现方案

通用SQL解法(兼容所有主流数据库)

核心逻辑为先按客户ID分组,统计每个用户是否购买过对应产品,再基于统计结果输出购买类型:

SELECT 
    `Customer ID`,
    CASE 
        WHEN has_red = 1 AND has_blue = 1 THEN 'Both'
        WHEN has_red = 1 THEN 'Red only'
        WHEN has_blue = 1 THEN 'Blue only'
    END AS `Product Purchased`
FROM (
    SELECT 
        `Customer ID`,
        -- 标记客户是否买过Red:1=买过,0=没买过
        MAX(CASE WHEN `Product Purchased` = 'Red' THEN 1 ELSE 0 END) AS has_red,
        -- 标记客户是否买过Blue:1=买过,0=没买过
        MAX(CASE WHEN `Product Purchased` = 'Blue' THEN 1 ELSE 0 END) AS has_blue
    FROM 你的交易表名 -- 替换为实际表名
    GROUP BY `Customer ID`
) AS customer_purchase_stat

简化SQL解法(仅需统计Red、Blue两类时可用)

如果仅需要统计这两类产品,可省去子查询,直接在分组后做判断:

SELECT
    `Customer ID`,
    CASE
        WHEN COUNT(DISTINCT `Product Purchased`) = 2 THEN 'Both'
        WHEN MAX(`Product Purchased`) = 'Red' THEN 'Red only'
        ELSE 'Blue only'
    END AS `Product Purchased`
FROM 你的交易表名
WHERE `Product Purchased` IN ('Red','Blue') -- 过滤无关产品
GROUP BY `Customer ID`

报错原因说明

  1. 不分组直接写CASE WHEN:每条交易记录都会生成一行结果,同一个客户有多条交易时自然出现重复ID
  2. 直接分组但CASE WHEN未包裹聚合函数:分组后数据库无法确定要取该客户下多条交易中哪一条的判断结果,因此抛出字段未聚合的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:03