【问题标题】:SQL - Agg Func Manhattan DistanceSQL - Agg Func 曼哈顿距离
【发布时间】:2018-04-07 00:23:24
【问题描述】:

所以链接没有回答这个问题。我不知道如何在 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 |号码

数据库: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;

【问题讨论】:

  • 曼哈顿距离假定为平面,这是短距离的合理近似值。它不适用于长距离的球坐标。

标签: mysql sql


【解决方案1】:

曼哈顿距离的公式是| a - c| + | b-d|其中 a 和 b 是最小纬度和经度,c 和 d 分别是最大纬度和经度。

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

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

【讨论】:

  • 因为您提供了更新的公式,所以授予您答案。谢谢。
  • 感谢该hackerrank 网站。这是一个锻炼技能的好地方。
【解决方案2】:

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

您的代码做了一些不同的事情。如果您相应地更新您的代码,那么其余的都可以,并且会被hackerrank标记为正确。

【讨论】:

    【解决方案3】:

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

    还应该指出,由于您取的是同一范围的最小值和最大值,因此您实际上并不需要绝对值函数。 round(max(x)-min(x)+max(y)-min(y), 4) 运行良好 - 速度稍快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多