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

如何用CASE WHEN和PARTITION BY判断客户订单类型分类

如何用最简SQL判断客户的订单类型分类

输入数据

Cust IDOrder Type
Cust 1Online
Cust 2In-Store
Cust 2Online
Cust 3In-Store

期望输出

Cust IDNew_Order Type
Cust 1Online only
Cust 2Both
Cust 3In-Store only

最简SQL方案

你之前用开窗函数的思路绕了弯路,直接通过分组聚合+条件判断就能实现需求,而且结果天然是每个客户一行,不会出现NULL列:

通用版本(适配PostgreSQL、SQL Server、MySQL等多数数据库)

SELECT 
    "Cust ID",
    CASE 
        WHEN COUNT(DISTINCT "Order Type") = 2 THEN 'Both'
        WHEN MAX("Order Type") = 'Online' THEN 'Online only'
        ELSE 'In-Store only'
    END AS "New_Order Type"
FROM your_table_name
GROUP BY "Cust ID";

思路说明

  1. 按客户ID分组,先用COUNT(DISTINCT "Order Type")判断该客户是否存在两种订单类型,是的话直接返回Both
  2. 对于只有单一订单类型的客户,用MAX(或MIN,因为分组后只有唯一值)获取该类型,再映射到对应的“only”分类
  3. 整个逻辑无需开窗函数,分组后直接处理,代码简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:26