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个小数点。
答案 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'))
答案 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;