我想知道为什么当我添加最后一个过滤器时,这个SQL语句不起作用:
where filter_col = True
并执行错误,如:
分析异常:无法解析给定输入列的“filter_col
”:[a.cnt_tiers,a.date,a.etat,a.max_date,a.pays,a.poid,a.tiers,a.zyada];线13位置32;我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择。
dfsql = spark.sql(""" select a.tiers , a.poid, a.etat, a.pays , a.zyada, a.date , a.max_date ,a.cnt_tiers,
CASE
WHEN a.cnt_tiers = 1 THEN True
WHEN a.cnt_tiers > 1 and a.date =a.max_date THEN True
ELSE False
END AS filter_col
from (select *, MAX(date) OVER (PARTITION BY tiers) AS max_date , COUNT(*) OVER (PARTITION BY tiers) as cnt_tiers
from tierstbl
where poid is not null and etat is not null and pays is not null and zyada is not null ) a
where filter_col = True
""")
2条答案
按热度按时间vc9ivgsu1#
或者,可以在where子句中包含计算结果为true的逻辑。
ltskdhd12#
内表(
a
)中没有filter_col
列,只有cnt_tiers
列。如果需要基于filter_col进行过滤,则需要在外部嵌套另一层select,或者在内表时使用case直接构造filter_col列,而不是cnt_tiers列。