无法按别名过滤

问题描述

created_at -键入带时区的时间戳记

查询

key
-------
code
Company
Region

成功工作。很好。

现在我只想显示 delta_sec> 10000

的记录

我尝试这个:

 select id,created_at,extract(epoch from CURRENT_TIMESTAMP - created_at) as delta_sec
    from shop_order

但是我得到了错误

select id,extract(epoch from CURRENT_TIMESTAMP - created_at) as delta_sec
from shop_order
where delta_sec > 10000

解决方法

或者,如果要使用别名进行过滤,请先将数据放入CTE:

WITH cte_name AS (
     SELECT
      id,created_at,extract(epoch from CURRENT_TIMESTAMP - created_at) as delta_sec
    FROM shop_order
)
SELECT *
    FROM cte_name
    WHERE delta_sec > 10000
,

只需重复该表达式即可,而不要使用其别名,例如:

select 
  id,extract(epoch from CURRENT_TIMESTAMP - created_at)
from shop_order
where extract(epoch from CURRENT_TIMESTAMP - created_at) > 10000

如果您担心数据库将运行该表达式两次,从而减慢查询速度:请放心,让PostgreSQL处理它。