我需要按照postgres中的计算列进行过滤。使用MySQL很容易,但如何使用Postgres SQL实现?
伪代码:
select id, (cos(id) + cos(id)) as op from myTable WHERE op > 1;
任何SQL技巧?
答案 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
。