题目:
表 point_2d 保存了所有点(多于 2 个点)的坐标 (x,y) ,这些点在平面上两两不重合。
写一个查询语句找到两点之间的最近距离,保留 2 位小数。
最近距离在点 (-1,-1) 和(-1,2) 之间,距离为 1.00 。所以输出应该为:
解题思路:
建表语句:
1 create table if not exists point_2d (x int(3),y int(3)); 2 truncate table point_2d 3 insert into point_2d values(-1,-1),(0,0),(-1,-2);
运用MySQL中的数学函数---sqrt(数值)求平方根
①先将表自连接,但是注意连接的条件是两个点不相同,避免后续求距离的时候算成自己与自己的距离。
1 select * 2 from point_2d p1 3 join point_2d p2 4 on (p1.x,p1.y) <> (p2.x,p2.y)
②然后运用平方根公式计算出两个点之间的距离,且用round()来保留两位小数,最后筛选出最小的距离。
1 select min(round( sqrt( pow(p1.x-p2.x,2) + pow(p1.y-p2.y,2) ),2)) as shortest 2 from point_2d p1 3 join point_2d p2 4 on (p1.x,p1.y) <> (p2.x,p2.y);
小知识:
①平方用power(x,2),而不是x^2
②二次平方根函数:
sqrt(数值):数值如果为0,返回NULL
更多函数可参考:这位老师的博客(点我跳转)
标签:p2,2d,p1,point,612,距离,力扣,MySQL From: https://www.cnblogs.com/liu-myu/p/17282087.html