将多个 Case 语句组合成单个输出列
Combining multiple Case statements into single output column
我需要通过匹配特定条件将具有 10 个唯一值的列 marketing_channel
重新分类为 15 个不同的组。
我已经通过 case 语句完成了此操作,但输出在 15 个新列中。
- 是否有更优雅的方法来重新class marketing_channel,只需添加 1 个额外的列,例如包含所有新的 15 个 class 的
"marketing_sub_channel"
?
- 有没有比创建 15 个 case 语句更好的方法来完成 class化?正在考虑一个
with
子句,但这也很长
输出看起来像这样,但最终只需添加一个列就可以了:
是的,您只需稍微更改一下格式即可。删除每行开头的“case”语句,只将“End”放在语句的末尾,如下所示:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE null
END as marketing_sub_channel
或者您的情况:
CASE
WHEN medium like ('%affiliate%') or marketing_cannel ='Affiliates' then 'Affiliate'
WHEN campaign like ('%_Display brand_global Progromatic Display%') then 'Dispay'
WHEN campaign like ('%display%') and campaign not like ('progrommatic') then 'Dispay'
....
else null
END as marketing_sub_channel
我还想指出,在你的案例陈述中,因为你有 '%display%' 和 '%_Display brand_global Progromatic Display%',所以你把较长的更具体的放在上面,这样它就可以如果需要触发。如果“%display%”在最上面,那么它将始终首先触发,因为它包含另一个的子字符串。
我需要通过匹配特定条件将具有 10 个唯一值的列 marketing_channel
重新分类为 15 个不同的组。
我已经通过 case 语句完成了此操作,但输出在 15 个新列中。
- 是否有更优雅的方法来重新class marketing_channel,只需添加 1 个额外的列,例如包含所有新的 15 个 class 的
"marketing_sub_channel"
? - 有没有比创建 15 个 case 语句更好的方法来完成 class化?正在考虑一个
with
子句,但这也很长
输出看起来像这样,但最终只需添加一个列就可以了:
是的,您只需稍微更改一下格式即可。删除每行开头的“case”语句,只将“End”放在语句的末尾,如下所示:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE null
END as marketing_sub_channel
或者您的情况:
CASE
WHEN medium like ('%affiliate%') or marketing_cannel ='Affiliates' then 'Affiliate'
WHEN campaign like ('%_Display brand_global Progromatic Display%') then 'Dispay'
WHEN campaign like ('%display%') and campaign not like ('progrommatic') then 'Dispay'
....
else null
END as marketing_sub_channel
我还想指出,在你的案例陈述中,因为你有 '%display%' 和 '%_Display brand_global Progromatic Display%',所以你把较长的更具体的放在上面,这样它就可以如果需要触发。如果“%display%”在最上面,那么它将始终首先触发,因为它包含另一个的子字符串。