我需要按 postgres 中的计算列进行过滤。使用 MySQL 很容易,但如何使用 Postgres SQL 实现?
伪代码:
select id, (cos(id) + cos(id)) as op from myTable WHERE op > 1;
有什么 SQL 技巧吗?
最佳答案
如果不想重复表达式,可以使用派生表:
select *
from (
select id, cos(id) + cos(id) as op
from myTable
) as t
WHERE op > 1;
这不会对性能产生任何影响,它只是 SQL 标准要求的语法糖。
或者,您可以将上面的内容重写为公用表表达式:
with t as (
select id, cos(id) + cos(id) as op
from myTable
)
select *
from t
where op > 1;
您更喜欢哪一个很大程度上取决于品味。 CTE 的优化方式与派生表相同,因此第一个可能更快,尤其是当表达式 cos(id) + cos(id)
关于sql - Postgres如何使用子句实现计算列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187583/