假设有一个查询,它计算给定点和存储在数据库中的点之间的距离。其目的是找到几个与给定点最接近的点

select x,y, get_distance(25,13,x,y) as dis
from points
order by dis

但作为一个条件,我想对距离设置限制,以便只得到距离
select x,y, get_distance(25,13,x,y) as dis
from points
where dis <1000
order by dis

此查询的结果是:
错误:列“DIS”不存在
所以我不得不写两次函数调用:
  select x,y, get_distance(25,13,x,y) as dis
    from points
    where get_distance(25,13,x,y) <1000
    order by dis

尽管函数get_distance被声明为不可变的,并且计算量没有文档中声明的两倍,但是查询本身看起来很难看。
有没有什么方法可以使用get_distance的结果作为dis in condition而不写两次呢?

最佳答案

对。

SELECT * FROM (
    SELECT x, y, get_distance(25, 13, x, y) dis FROM points
) t
WHERE dis < 1000
ORDER BY dis

关于function - 在SELECT和WHERE中使用Postgresql函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21275426/

10-09 23:05