PostgreSQL: ОШИБКА: столбец «bb» не существует

#postgresql #column-alias

#postgresql #псевдоним столбца #столбец-псевдоним

Вопрос:

Я не силен в SQL, я хотел использовать MAX с помощью partition by в следующем запросе, но когда я использую тот же запрос без предложения where этого столбца max drive, он говорит, что столбец не существует, но если я удалю столбец, из которого я могу видеть в 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».

Комментарии:

1. Я думаю, вам нужно having вместо where фильтрации совокупного результата

2. Я получил ответ, я хотел использовать поле (новое) перед предложением where, но операция where выполняется перед select.. вот почему этот конкретный столбец теперь доступен для, в то время как он не вычислялся ранее..

Ответ №1:

Псевдоним, определенный в 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