Sql Postgres IF table.x>;表y

Sql Postgres IF table.x>;表y,sql,postgresql,if-statement,Sql,Postgresql,If Statement,可以在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... 为什么不将子查询重新编写为 选择最小值(表1.x、表1.y)作为lst 然后在当前使用表1.x的任何地方使用lst 请参阅Postgres手册以了解的说明。为什么不将子查询重新编

可以在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...

为什么不将子查询重新编写为

选择最小值(表1.x、表1.y)作为lst

然后在当前使用表1.x的任何地方使用
lst


请参阅Postgres手册以了解的说明。

为什么不将子查询重新编写为

选择最小值(表1.x、表1.y)作为lst

然后在当前使用表1.x的任何地方使用
lst


请参阅Postgres手册以了解有关的说明。

至少在这种情况下是一个很好的解决方案,但更通用的转换是
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
    ...

在这种情况下,
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
    ...

从性能的角度来看,哪一个是最好的选择?我们的数据库是巨大的(TB),所以性能就是一切。我真的不知道,不管有什么不同,它很可能是以纳秒为单位来衡量的,除非你在一个巨大的结果集上执行它,否则就无关紧要了。我是。这在视图的上下文中使用,该视图与大约3亿行进行接口。无论如何,这似乎是最好的办法。谢谢从性能的角度来看,哪一个是最好的选择?我们的数据库是巨大的(TB),所以性能就是一切。我真的不知道,不管有什么不同,它很可能是以纳秒为单位来衡量的,除非你在一个巨大的结果集上执行它,否则就无关紧要了。我是。这在视图的上下文中使用,该视图与大约3亿行进行接口。无论如何,这似乎是最好的办法。谢谢