要求:写一个查询语句找到两点之间的最近距离,保留 2 位小数。
point_2d表:
| x | y |
|----|----|
| -1 | -1 |
| 0 | 0 |
| -1 | -2 |
表 point_2d 保存了所有点(多于 2 个点)的坐标 (x,y) ,这些点在平面上两两不重合。
Result Table:
| shortest |
|----------|
| 1.00 |
分析:
1.两点之间距离等于根号下((x1-x2)(x1-x2)+(y1-y2)(y1-y2)),这里使用sqrt()函数求平方根
2.为了求最短距离,首先需要求出两点之间距离,使用两张表自连接,取两张表中不同的点做求距离运算,通过order by进行升序排序,limit取第一个值就是最短距离,使用round()保留两位
SQL语句:
#1.方法1
SELECT ROUND(d,2) AS shortest FROM(
SELECT SQRT((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))AS d
FROM point_2d a,point_2d b
WHERE a.x!=b.x OR a.y!=b.y)c
ORDER BY shortest ASC
LIMIT 1;
#2.方法2
select round(sqrt(d),2) as shortest
from(
select distinct (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)
as d
from point_2d a,point_2d b
)c
where d!=0
order by shortest asc
limit 1;