Попытка сделать это:
SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field FROM table WHERE case_field >= 9000
и получить сообщение об ошибке, что case_field не существует.
Возможно ли это сделать без дублирования CASE?
Похоже, что PostgresSQL поддерживает производные таблицы
SELECT * FROM ( SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field FROM table ) AS derived WHERE case_field >= 9000
Возможно, вы захотите убедиться, что это не оказывает какого-либо негативного влияния на план выполнения.
Использовать временную таблицу:
SELECT * FROM ( SELECT CASE WHEN field = true THEN one * another ELSE one END as case_field FROM table ) a WHERE a.case_field >= 9000