PySpark转SQL:多分组条件CASE WHEN语句语法错误排查
问题解决:PySpark转SQL的CASE WHEN语法错误修正
你的转换错误核心在于把PySpark的contains方法错误对应成了SQL的IN操作符,这是两种完全不同的逻辑:
- PySpark的
col.contains("xxx")是模糊匹配字符串中是否包含子串,对应SQL的LIKE '%xxx%' - SQL的
IN是用来匹配固定值集合(比如IN ('val1','val2')),不能用来做子串模糊匹配
另外~contains对应的是NOT LIKE '%xxx%',而非NOT IN 'xxx'。
修正后的SQL语句
CASE WHEN (tCounts = 3 AND Type1 LIKE '%pizza%') AND (Type1 NOT LIKE '%singleside%' OR Type1 NOT LIKE '%side%') THEN 2 WHEN (tCounts = 3 AND Type1 LIKE '%pizza%') AND (Type1 LIKE '%singleside%' OR Type1 LIKE '%side%') THEN 1 END AS portalcount
可选优化:简化重复条件
因为两个WHEN分支都包含tCounts = 3 AND Type1 LIKE '%pizza%',可以把这部分条件提出来,用嵌套CASE提升可读性,不需要额外调整括号分组:
CASE WHEN tCounts = 3 AND Type1 LIKE '%pizza%' THEN CASE WHEN Type1 NOT LIKE '%singleside%' OR Type1 NOT LIKE '%side%' THEN 2 ELSE 1 END END AS portalcount
内容的提问来源于stack exchange,提问作者tamarajqawasmeh
相关产品推荐
相关产品推荐

