欧氏距离

Euclidean Distance

Hacker Rank - Weather Observation Station 19

Given a table STATION that holds data for five fields namely ID, CITY, STATE, NORTHERN LATITUDE and WESTERN LONGITUDE.

+-------------+------------+
| Field       |   Type     |
+-------------+------------+
| ID          | INTEGER    |
| CITY        | VARCHAR(21)|
| STATE       | VARCHAR(2) |
| LAT_N       | NUMERIC    |
| LONG_W      | NUMERIC    |
+-------------+------------+

Consider P1(a, b) and P2(c, d) be two points on 2D plane, where (a, b) be minimum and maximum values of Northern Latitude and (c, d) be minimum and maximum values of Western Longitude. Write a query to print the Euclidean Distance between points P1 and P2 up to 4 decimal digits.

我的 oracle 解决方案是:

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

但它给出了 3 个小数点的答案,但我需要 4 个小数点。

试试这个 ltrim(to_char(x, '999.9999'))

Number Format Models

一定会成功的。

DECLARE @a numeric(36,4),@b numeric(36,4),@c numeric(36,4),@d numeric(36,4)
SET @a=(SELECT MIN(CAST(ROUND(LAT_N,4) as numeric(36,4))) FROM STATION);
SET @b=(SELECT MIN(CAST(ROUND(LONG_W ,4) as numeric(36,4))) FROM STATION);
SET @c=(SELECT MAX(CAST(ROUND(LAT_N,4) as numeric(36,4))) FROM STATION);
SET @d=(SELECT MAX(CAST(ROUND(LONG_W ,4) as numeric(36,4))) FROM STATION);
SELECT DISTINCT CAST(ROUND((POWER(((POWER((@c-@a),2))+(POWER((@d-@b),2))),0.5)),4) as numeric(36,4)) FROM STATION

试试这个:

select round(sqrt(POWER((MAX(LAT_N) - MIN(LAT_N)),2) 
    + POWER((MAX(LONG_W) - MIN(LONG_W)),2)),4)
from station;
SELECT  LTRIM(
          TO_CHAR(
            SQRT(
              POWER(MAX(LAT_N) - MIN(LAT_N), 2) +
              POWER(MAX(LONG_W) - MIN(LONG_W), 2)
            ),
            '999.9999'
          )
        ) 
FROM    STATION;

试试这个 SQL:

select
    cast(sqrt((power(max(lat_n)-min(lat_n),2))+(power(max(long_w)-in(long_w),2))) as decimal(16,4))
from station;
select round(sqrt(((MAX(LAT_N) - MIN(LAT_N))*(MAX(LAT_N) - MIN(LAT_N))) 
+ ((MAX(LONG_W) - MIN(LONG_W))*(MAX(LONG_W) - MIN(LONG_W)))),4)

从车站;

在 ORACLE 中试试这个 SQL。


SELECT
    CAST( SQRT( POWER(MIN(LAT_N)
        - MAX(LAT_N), 2)
            + POWER(MIN(LONG_W)
                - MAX( LONG_W), 2)) AS DECIMAL (10, 4))
FROM STATION

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

这应该有效。

这对我有用:

Select round(sqrt(power((min(lat_n)-max(lat_n)),2) + power((min(long_w)-max(long_w)),2)),4) From station

对于 MySql 它工作正常:

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

对于SQL服务器,尝试这样:

SELECT 
cast(
    round(
        SQRT(
             SQUARE((Abs ((MIN(LAT_N ) - MAX(LAT_N )))) )
           + SQUARE( (Abs((MIN(LONG_W  ) - MAX(LONG_W  )))))
            )
        ,4)
as decimal(18,4)
)
    
FROM  STATION

更正您的 SQL 查询 -- (min(lat_n) - max(lat_n))+abs(min(long_w) - max(long_w)) --

欧氏距离

定义:两点之间的直线距离。在p1在(x1, y1)和p2在(x2, y2)的平面上,它是√((x1 - x2)² + (y1 - y2)²).

select round(sqrt(power((min(lat_n) - max(lat_n)),2) + power((min(long_w) - max(long_w)),2)),4) from station

您可以使用 Oracle 运行 以下代码。

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

MySQL 解决方案:

select 轮(功率(功率((min(lat_n)-max(lat_n)),2)+功率((min(long_w)-max(long_w)) ,2),1/2),4) 作为距离 从车站;

在这段代码中,我使用了 power(x,1/2) 而不是 sqrt(x) ..以便将来需要找到第 n 个根时,我们可以使用 power(x, 1/y) 操作(其中 y = 0,1,2,..,n).

这就是答案... MySQL

select round(SQRT(pow(min(LAT_N) - max(LAT_N),2) + pow(min(LONG_W) - max(LONG_W),2)),4)
from station
SELECT ROUND(POWER(POWER(MAX(Station.LAT_N) -MIN(Station.LAT_N),2) + POWER(MAX(Station.LONG_W) - MIN(Station.Long_W),2),0.5), 4) 
FROM Station;
select round(ltrim(sqrt(power(max(LAT_N) - min(LAT_N), 2) + power(max(LONG_W) - min(LONG_W), 2)),'999.9999'), 4) FROM STATION;

这是我在 hackerank 上的 DB2 编辑器上工作的代码

select round(sqrt(power(max(LAT_N) - min(LAT_N), 2) + power(max(LONG_W) - min(LONG_W), 2)), 4) FROM STATION;

这是我在 hackerrankMySQL 编辑器上工作的代码

In Euclidean plane

距离

dist((x, y), (a, b)) = sqrt ((x - a)² + (y - b)²)

这个查询做这个操作

select round(sqrt (power(max(lat_n)-min(lat_n),2)+power(max(long_w)-min(long_w),2)),4)
from station