话不多说, 先看数据表信息.
数据表信息:
point_2d 表, 包含一个平面内一些点 (超过两个) 的坐标值 (x, y) .
|x | y |
|----|----|
| -1 | -1 |
| 0 | 0 |
| -1 | -2 |
话不多说, 再看需求~
需求:
写一条查询语句求出这些点中的最短距离并保留2位小数。上述数据应该输出如下结果:
+--------+
|shortest|
+--------+
|1.00 |
+--------+
结果解释:
最短距离是1,从点(-1,-1)到点(-1,-2)。
话不多说, 进行拆解~
拆解:
select
round(sqrt(min(pow((p1.x - p2.x), 2) + pow((p1.y - p2.y), 2))), 2) as shortest
from point_2d p1, point_2d p2
where (p1.x, p1.y) <> (p2.x, p2.y)
;
效果如下:
该查询语句使用了min函数求出最小距离,pow函数计算平方,sqrt函数计算平方根,并使用round函数将结果保留2位小数。通过使用两个表别名p1和p2,可以将每个点与其他所有点进行比较,以找到最短距离。同时,使用where子句来排除点与自身的比较。结果将显示在名为shortest的列中。
最后给大家介绍一下我这边的创建数据表和插入数据的操作步骤, 想要自己测试的话, 可以参考:
CREATE TABLE point_2d (
x INT,
y INT
);
INSERT INTO point_2d (x, y)
VALUES (-1, -1),
(0, 0),
(-1, -2);
效果如下: