欧几里德距离

时间:2016-10-06 09:33:05

标签: sql oracle rounding

Hacker Rank - Weather Observation Station 19

  

给定一个表STATION,其中包含五个字段的数据,即ID,CITY,   国家,北纬和伦敦西部。

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

考虑P1(a,b)和P2(c,d)是2D平面上的两个点,其中(a,   b)北纬度和(c,d)的最小值和最大值   西经度的最小值和最大值。写一个查询   打印点P1和P2之间的欧几里德距离,最多4位小数   位数。

我的oracle解决方案是:

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

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

16 个答案:

答案 0 :(得分:1)

这对我有用:

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

答案 1 :(得分:1)

MySQL 解决方案:

选择 round( power( power((min(lat_n)-max(lat_n)),2) + power((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).

答案 2 :(得分:0)

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

Number Format Models

答案 3 :(得分:0)

它肯定会起作用。

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

答案 4 :(得分:0)

尝试以下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;

答案 5 :(得分:0)

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中尝试。

答案 6 :(得分:0)


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

答案 7 :(得分:0)

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

这应该有效。

答案 8 :(得分:0)

对于MySql,它工作正常:

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

答案 9 :(得分:0)

对于SQL Server,请尝试如下操作:

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

答案 10 :(得分:0)

更正您的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

答案 11 :(得分:0)

您可以使用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;

答案 12 :(得分:0)

这是答案...在 MySQL 中

select round(SQRT(pow(min(LAT_N) - max(LAT_N),2) + pow(min(LONG_W) - max(LONG_W),2)),4)
from station

答案 13 :(得分:-1)

试试这个:

select round(sqrt(POWER((MAX(LAT_N) - MIN(LAT_N)),2) 
    + POWER((MAX(LONG_W) - MIN(LONG_W)),2)),4)
from station;

答案 14 :(得分:-1)

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;

答案 15 :(得分:-1)

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;