Postgres如何实现带有子句的计算列

时间:2015-08-24 16:50:12

标签: sql postgresql postgresql-9.3

我需要按照postgres中的计算列进行过滤。使用MySQL很容易,但如何使用Postgres SQL实现?

伪代码:

select id, (cos(id) + cos(id)) as op from myTable WHERE op > 1;

任何SQL技巧?

2 个答案:

答案 0 :(得分:8)

如果您不想重复表达式,可以使用派生表:

_

这不会对性能产生任何影响,它只是SQL标准所需的语法糖。

或者,您可以将上述内容重写为公用表表达式:

select *
from (
   select id, cos(id) + cos(id) as op 
   from myTable 
) as t 
WHERE op > 1;

你喜欢哪一个主要是品味问题。 CTE的优化方式与派生表的优化方式相同,因此第一个可能更快,特别是如果表达式with t as ( select id, cos(id) + cos(id) as op from myTable ) select * from t where op > 1; 上有索引

答案 1 :(得分:2)

select id, (cos(id) + cos(id)) as op 
from selfies 
WHERE (cos(id) + cos(id)) > 1

您应该在where子句中指定计算,因为您无法使用alias