欧氏距离
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'))
一定会成功的。
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 编辑器上工作的代码
距离
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
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'))
一定会成功的。
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 编辑器上工作的代码
距离
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