如何在Databricks SQL的后续CTE中使用窗口函数?
Databricks SQL中能否在后续CTE中使用前置CTE定义的窗口函数列?
你的问题核心不是Databricks SQL不支持在后续CTE中引用前置CTE里窗口函数生成的列,而是示例代码里存在语法错误,导致窗口函数未正确生成目标列,进而引发后续的列未找到报错。
问题代码中的错误点
在base CTE的窗口函数定义里,partition by col1后面多了一个多余的逗号:
row_number() OVER(partition by col1, ORDER BY col2, col3) as primary_rank
这个语法错误会导致SQL解析失败,primary_rank列并未被正确创建,所以后续middle CTE里引用该列时会提示无法解析。
修正后的代码
去掉partition by子句末尾的多余逗号,即可正常在后续CTE中引用窗口函数生成的列:
with base as ( select *, row_number() OVER(partition by col1 ORDER BY col2, col3) as primary_rank from table1 ), middle as ( select * from base where primary_rank = 1 ) select ID, count(*) as n from middle group by ID having n > 1
结论
Databricks SQL完全支持在后续CTE或SELECT语句中引用前置CTE里由窗口函数生成的列,只要前置CTE的语法正确,列能正常被创建即可。
内容的提问来源于stack exchange,提问作者smoot
相关产品推荐
相关产品推荐

