文章目录
- 1. 612.平面上的最近距离
- 1.1 题目说明
- 1.2 准备数据
- 1.3 解法
- 1.4 结果截图
1. 612.平面上的最近距离
1.1 题目说明
Point2D 表:
±------------±-----+
| Column Name | Type |
±------------±-----+
| x | int |
| y | int |
±------------±-----+
(x, y) 是该表的主键列(具有唯一值的列的组合)。
这张表的每一行表示 X-Y 平面上一个点的位置
p1(x1, y1) 和 p2(x2, y2) 这两点之间的距离是 sqrt((x2 - x1)2 + (y2 - y1)2) 。
编写解决方案,报告 Point2D 表中任意两点之间的最短距离。保留 2 位小数 。
返回结果格式如下例所示。
示例 1:
输入:
Point2D table:
±—±—+
| x | y |
±—±—+
| -1 | -1 |
| 0 | 0 |
| -1 | -2 |
±—±—+
输出:
±---------+
| shortest |
±---------+
| 1.00 |
±---------+
解释:最短距离是 1.00 ,从点 (-1, -1) 到点 (-1, 2) 。
1.2 准备数据
Create Table If Not Exists Point2D (x int not null, y int not null)
Truncate table Point2D
insert into Point2D (x, y) values ('-1', '-1')
insert into Point2D (x, y) values ('0', '0')
insert into Point2D (x, y) values ('-1', '-2')
1.3 解法
with t1 as(select p1.x as x1,p1.y as y1,p2.x as x2,p2.y as y2 from Point2D p1,Point2D p2
),t2 as (select round(sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)),2) as sqrt from t1
),t3 as (select sqrt,row_number() over (order by sqrt) from t2 where sqrt != 0 limit 1
)
select round(sqrt,2) as shortest from t3