PostgreSQL:错误:列";bb";不存在

PostgreSQL:错误:列";bb";不存在,postgresql,column-alias,Postgresql,Column Alias,我不擅长SQL,我想在下面的查询中使用partition by获取MAX,但是当我使用相同的查询时,如果没有MAX drive列的where子句,它会说该列不存在,但是如果我从select中可以看到的列中删除该列,则会显示相同的列 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.col

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

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”创建了该列。

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

或CTE:

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

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

或CTE:

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

我想您需要使用
而不是
where
来过滤聚合结果我得到了答案,我想在where子句之前使用字段(新字段),但在select之前执行where操作。。这就是为什么该特定列现在可供使用,而它以前没有计算过..我认为您需要
have
而不是
where
来过滤聚合结果我得到了答案,我想在where子句之前使用字段(新字段),但在select之前执行操作。。这就是为什么该特定列现在可用于,而以前没有计算过。。