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

求助:在Databricks SQL中基于Category字段生成Group列

Databricks SQL实现按Trans_ID分组生成Group列

你可以通过窗口函数结合条件判断来实现需求,核心是按Trans_ID分组,判断组内是否存在非Dog/Puppy的类别,再给每条记录赋值对应的Group值。以下是两种简洁的实现方式:

方法一:使用CASE嵌套+MAX窗口函数

SELECT 
  Trans_ID,
  Category,
  CASE 
    -- 统计当前Trans_ID下是否存在非Dog/Puppy的类别
    WHEN MAX(CASE WHEN Category NOT IN ('Dog', 'Puppy') THEN 1 ELSE 0 END) OVER (PARTITION BY Trans_ID) = 1 
    THEN 'Multi' 
    ELSE 'Only Dog' 
  END AS `Group`
FROM filtered_table; -- 替换为你的已过滤表名

逻辑说明:

  1. 内层CASE将非Dog/Puppy的类别标记为1,其余标记为0
  2. MAX() OVER (PARTITION BY Trans_ID)获取当前Trans_ID分组内的最大值,若最大值为1,说明组内存在非Dog/Puppy的类别
  3. 外层CASE根据最大值结果,返回对应的Group值

方法二:使用COUNT_IF窗口函数(更简洁)

Databricks SQL支持COUNT_IF函数,可以直接统计满足条件的行数,写法更直观:

SELECT 
  Trans_ID,
  Category,
  CASE 
    -- 统计当前Trans_ID下非Dog/Puppy的类别数量,大于0则返回Multi
    WHEN COUNT_IF(Category NOT IN ('Dog', 'Puppy')) OVER (PARTITION BY Trans_ID) > 0 
    THEN 'Multi' 
    ELSE 'Only Dog' 
  END AS `Group`
FROM filtered_table; -- 替换为你的已过滤表名

逻辑说明:

COUNT_IF(Category NOT IN ('Dog', 'Puppy')) OVER (PARTITION BY Trans_ID)直接统计当前Trans_ID分组内,非Dog/Puppy的记录数量。若数量大于0,说明组内存在其他类别,返回Multi;否则返回Only Dog。

两种方法都能完美匹配你给出的示例结果,比如Trans_ID=1包含Cat,会被标记为Multi;Trans_ID=2、3仅包含Dog/Puppy,会被标记为Only Dog。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:25