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

Snowflake SQL中按distinct customer_id聚合交易类型的实现咨询

Snowflake SQL 客户交易类型判定修正方案

原SQL问题

你的原有SQL存在两处核心错误:

  • 未对customer_id做聚合去重,会返回每个客户的所有原始交易记录,无法得到每个客户唯一的判定结果
  • CASE判断仅针对单条记录的type值,没有统计同一个客户下的所有type取值,无法识别同时存在a和b的场景

推荐修正方案(GROUP BY聚合实现,性能最优)

SELECT 
    customer_id,
    CASE 
        WHEN COUNT(DISTINCT type) = 1 THEN MAX(type)
        ELSE 'mixed'
    END AS type
FROM CUSTOMERS
GROUP BY customer_id
ORDER BY customer_id;

逻辑说明

  • 按customer_id分组,天然实现每个客户只返回一条记录的去重需求
  • 用COUNT(DISTINCT type)统计每个客户的交易类型数量:
    • 数量为1时,说明该客户所有交易类型相同,用MAX(type)/MIN(type)都可以拿到这个唯一的类型值
    • 数量大于1时,说明同时存在a和b,直接返回mixed即可

注意:如果你的表字段是大小写敏感定义(建表时用了双引号包裹字段名),把SQL里对应的字段名加上双引号即可,比如"customer_id"、"type"。

可选方案(窗口函数实现)

如果你需要用窗口函数实现,也可以搭配DISTINCT去重完成需求:

SELECT DISTINCT
    customer_id,
    CASE 
        WHEN COUNT(DISTINCT type) OVER (PARTITION BY customer_id) = 1 THEN type
        ELSE 'mixed'
    END AS type
FROM CUSTOMERS
ORDER BY customer_id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:45:00