Можно ли сделать следующий псевдокод в Postgres 8+ или универсальный SQL?
SELECT table1.a, table1.b ... table1.x, (IF table1.x > table1.y RETURN table1.y ELSE return table1.x AS table1.y), table1.z...
LEAST является хорошим решением в этом случае, но более общим преобразованием будет выражение CASE
LEAST
CASE
SELECT table1.a, table1.b, ... table1.x, CASE WHEN table1.x > table1.y THEN table1.y ELSE table1.x END AS y, table1.z ...
Почему бы просто не переписать подзапрос как
SELECT LEAST(table1.x, table1.y) AS lst
и затем используйте lst везде, где вы сейчас используете table1.x?
lst
table1.x
См. Руководство Postgres для описания LEAST.