1

我不擅长 SQL,我想在下面的查询中使用 partition by 来获取 MAX,但是当我使用相同的查询而没有该 max drive 列的 where 子句时,它说该列不存在,但是如果我从 where 删除该列我可以在选择中看到存在相同的列。

select 
MAX(case when total_split_count = 0 or total_split_count is null then total_split_count  else 1 end) OVER (PARTITION BY ia.col1,ia.col2,ia.col3,ia.col4,ia.col5,ia.col6) as bb
from audits.tbl_name ia
where bb = 1

错误:列“bb”不存在位置:304

其中 bb = 1 ^ 1 语句失败。

但查询使用 where 子句运行:

select 
MAX(case when total_split_count = 0 or total_split_count is null then total_split_count  else 1 end) OVER (PARTITION BY ia.col1,ia.col2,ia.col3,ia.col4,ia.col5,ia.col6) as bb
from audits.tbl_name ia

注意:我在运行时通过“as”创建了该列。

4

1 回答 1

4

在子句中定义的别名在select子句中不可见where。利用

select * from (select ... as bb from audits.tbl_name ia) x where bb = 1

或 CTE:

with x as (select ... as bb from audits.tbl_name ia) select * from x where bb = 1
于 2020-08-14T07:45:59.833 回答