我正在将一个PySpark DataFrame转换为SQL,并且在转换时遇到了困难

.withColumn("portalcount", when(((F.col("tCounts") == 3) & (F.col("Type1").contains("pizza"))) & ((~(F.col("Type1").contains("singleside"))) | (~(F.col("Type1").contains("side")))), 2)
           .when(((F.col("tCounts") == 3) & (F.col("Type1").contains("pizza"))) & ((F.col("Type1").contains("singleside")) | (F.col("Type1").contains("side"))), 1)

CASE
WHEN (tCounts = 3 AND Type1 IN 'pizza') AND (Type1 NOT IN 'singleside' OR Type1 NOT IN 'side') then 2
WHEN (tCounts = 3 AND Type1 IN 'pizza') AND (Type1 IN 'singleside' OR Type1 IN 'side') then 1
END portalcount

查询的其余部分运行,但不使用分组的CASE WHEN语句.我收到一个分析语法错误.是否应将其重新构造为嵌套的Case When语句?我try 了很多种对括号进行分组的方法,但都没有成功.

推荐答案

在SQL IN中,需要一个元素列表,因此需要用括号将元素括起来

CASE
WHEN (tCounts = 3 AND Type1 IN ('pizza')) AND (Type1 NOT IN ('singleside','side') ) then 2
WHEN (tCounts = 3 AND Type1 IN ('pizza')) AND (Type1 IN ('singleside','side') ) then 1
END portalcount

Sql相关问答推荐

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

从以前的非空值行中获取值

如何根据特定的内部json元素值过滤postgres查询结果?

按每天的最大值分组

BigQuery-当子查询不返回任何结果时,所有结果为零

在SQL中返回缺省值,即使查询不返回任何结果

SQL:如何在表中同时使用GROUPING和CONDITION?

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

基于是否具有某些数据的关联表覆盖SELECT语句中的列值

如何在SQL中从多个查询进行分组

按两列分组,并根据SQL中的条件返回第三个列值

如何在Postgres中为单值输入多行?

聚合内部的条件在哪里?

如何根据 SQL 中的阈值标记一个集群中的所有值?

比使用NOT EXISTS更高效的SQL删除方法是什么?

基于字符串的SQL查询

SQL Server 查找存在于所有不同时期(或序列)中的条目

如何对 SQL 表中的连续时间戳进行分组?

如何找到特定时间间隔内的最大和最小日期?

如何在 Oracle 中获取此变量的值?