试图通过查询获得欧氏距离

trying to get the Euclidean Distance through a query

我总是收到缺少表达式的错误,但我看不出我做错了什么?

    DECLARE
    lat NUMBER := -28;
    lon NUMBER := 151;
    BEGIN
    SELECT
      sighting_id 
    FROM
      sightings
    ORDER BY 
      sqrt(power(lat - latitude, 2) + power(lon - longitude, 2))

    END;

您的查询有几个错误。

  • from.
  • 前的逗号
  • 使用long,这是一个保留字(参见here)。
  • limit(Oracle 不支持)。
  • DESC 关键字应该在键表达式之后,而不是之前。对于距离,通常使用 ASC,而不是 DESC
  • 还有一个 PL/SQL 块,它有一个查询,但没有 INTO 子句或其他放置结果的地方。

您确定要使用 Oracle 吗?

编辑:

从看起来更像这样的查询开始:

WITH params as (
      SELECT -28 as lat, 151 as lon
      FROM dual
     )
SELECT s.sighting_id 
FROM params CROSS JOIN
     sightings s
ORDER BY sqrt(power(lat - latitude, 2) + power(lon - longitude, 2))
FETCH FIRST 1 ROW ONLY;  -- Note:  this is in Oracle 12c+

黑客排名解决方案:

SELECT ROUND(SQRT(POWER(MIN(LAT_N)-MAX(LAT_N),2) + POWER(MIN(LONG_W)-MAX(LONG_W),2)),4) FROM STATION;