在sql查询中的毕达哥拉斯

时间:2013-12-05 22:00:02

标签: mysql sql distance

有没有人知道如何在SQL脚本中编写毕达哥拉斯,然后将其链接到表格中的列等,我试图使用的公式是: -

(SQRT(MY_Y_AXIS-Y_AXIS^2)+(MY_X_AXIS-X_AXIS^2)

老实说,我正处于使用SQL的第二天,而我之前的任务只是获取一个序列来处理我的ID,所以如果你可以对输入的内容感到沮丧,那就太棒了。

2 个答案:

答案 0 :(得分:1)

应该是

SQRT( POW(MY_Y_AXIS - Y_AXIS, 2) + POW(MY_X_AXIS-X_AXIS, 2) )

答案 1 :(得分:0)

这是毕达哥拉斯定理的一个示例,用于查找PostgreSQL中两个纬度点表之间的最小距离。

create table if not exists public.test_pyth1 (
row_id serial,
lat float,
lon float);

create table if not exists public.test_pyth2 (
row_id serial,
lat float,
lon float
);

insert into public.test_pyth1 (lat, lon) values (1, 1);
insert into public.test_pyth1 (lat, lon) values (0, 2);
insert into public.test_pyth1 (lat, lon) values (1, 3);

insert into public.test_pyth2 (lat, lon) values (2, 1);
insert into public.test_pyth2 (lat, lon) values (2, 2);
insert into public.test_pyth2 (lat, lon) values (2, 3);

with min_distance as (
    select  buss_stop.row_id bid, MIN(POWER(buss_stop.lat-t.lat, 2) + 
POWER(buss_stop.lon-t.lon, 2)) mdistance
    from public.test_pyth1 buss_stop
    cross join public.test_pyth2 t
    group by buss_stop.row_id
),
distances as (
    select  buss_stop.row_id bid, t.row_id sid, POWER(buss_stop.lat-t.lat, 2) + 
POWER(buss_stop.lon-t.lon, 2) distance
    from public.test_pyth1 buss_stop
    cross join public.test_pyth2 t
) 
select * 
from distances d 
join min_distance md 
using(bid)
where md.mdistance = d.distance;