SQL - Agg Func Manhattan Distance

时间:2018-04-07 00:23:24

标签: mysql sql

SO Link不回答这个问题。我无法弄清楚如何在Hackerspace上解决这个问题。在线解决方案似乎都没有起作用。这是一个错误还是我做错了什么?

将P1(a,b)和P2(c,d)视为2D平面上的两个点。

a恰好等于北纬度的最小值(STATION中的LAT_N)。

b恰好等于西经的最小值(STATION中的LONG_W)。

c碰巧等于北纬度的最大值(STATION中的LAT_N)。

d恰好等于西经度中的最大值(STATION中的LONG_W)。

查询点之间的曼哈顿距离,并将其四舍五入到小数位。

输入格式

STATION表描述如下:

STATION表

  1. ID |号码
  2. 城市| VARCHAR2(21)
  3. 国家| VarChar2(2)
  4. LAT_N |编号
  5. LONG_W |编号
  6. 数据库:MySQL

    来源:https://www.hackerrank.com/challenges/weather-observation-station-18/problem

    链接:distance between two longitude and latitude(已尝试,但未提供任何答案。)

    SELECT ROUND(ABS(MIN(Station.LAT_N) - MIN(Station.LONG_W)) + ABS(MAX(Station.LAT_N) - MAX(Station.Long_W)), 4) 
    FROM Station;
    

3 个答案:

答案 0 :(得分:2)

曼哈顿距离的公式是| a - c | + | b - d |其中a和b分别为min lat和long,c和d分别为max lat和long。

select 
  round(
    abs(
      min(lat_n)- max(lat_n)
    ) + abs(
      min(long_w)- max(long_w)
    ), 4
  ) 
from 
  station;

我得到了25个hakker积分!我可以从你那里得到25分吗?

答案 1 :(得分:0)

如果不写答案:你需要计算最小和最大经度之间的水平差异,并添加最小纬度和最大纬度之间的垂直差异。

你的代码做了一些不同的事情。如果您相应地更新了代码,那么剩下的就行了,并且hackerrank会将其标记为正确。

答案 2 :(得分:0)

您正在比较纬度和经度,而您需要将纬度与纬度和经度与经度进行比较。 (1,3)(2,4)之间的曼哈顿距离为|1-2|+|3-4|,而不是|1-4|+|2-3|

还应该指出的是,由于您采用了相同范围的最小值和最大值,因此您实际上并不需要绝对值函数。 round(max(x)-min(x)+max(y)-min(y), 4)效果非常好 - 而且速度稍快。