试图通过查询获得欧氏距离
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;
我总是收到缺少表达式的错误,但我看不出我做错了什么?
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;