【问题标题】:Using a function within a select PostgreSQL在选择的 PostgreSQL 中使用函数
【发布时间】:2018-04-24 09:40:07
【问题描述】:

我有一个函数可以根据两点的纬度和经度计算两点之间的距离:

my_function (lat_point1 NUMERIC, long_point1 NUMERIC, lat_point2 NUMERIC, long_point2 NUMERIC)

我想使用select 中的函数来计算我的point1(始终相同)和我的point2(具有多个值)之间的距离。

我有一个包含 3 列和多行的表。第一列是地图中点的名称,第二列是该地点的纬度,第三列是经度。行有不同的点。

该函数有 4 个输入 my_function(latutude_point1, longitude_point1, latutude_point2, longitude_point2)。

问题是我需要计算 point1 与所有其他点之间的距离。换句话说,我需要计算point1与point2、point1与point3、point1与point4、point1与pointn之间的距离。

如何在选择中调用函数?

【问题讨论】:

  • select my_function(...) from ...
  • 是的,但是我怎么知道哪个 lon 和 lat 是 point1 以及哪个 longs 和 lats 是 point2?
  • 我不明白这个问题。
  • 我的观点在表格中。想象一下它的表 tb_points 具有这个结构 num_point、long_point、lat_point。所以第一行是point1、1.5641、45.6555,第二行是point2、1.6895、25.3654,以此类推。我不知道如何告诉女巫点应该采取的功能。我想计算point1和point2,point1和point3 ... point1和pointn之间的距离。
  • 一旦你有了一个包含所有你需要的列的 Select 函数,调用这个函数就变得很简单了。您可能需要致电 LEAD 或 LAG,或者您可以使用自加入。我不知道是哪个,因为您的问题缺少一些信息

标签: sql postgresql


【解决方案1】:

您正在寻找cross join:

select t1.*, t2.*,
       my_function(t1.lat, t1.lng, t2.lat, lt2.lng)
from t t1 cross join
     t t2;

您可能需要包含where t1.lat <> t2.lat and t1.lng <> t2.lng 以避免自我比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2011-06-12
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多