Sql Postgres IF table.x>;表y
可以在Postgres 8+或通用SQL中执行以下伪代码吗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手册以了解的说明。为什么不将子查询重新编
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亿行进行接口。无论如何,这似乎是最好的办法。谢谢