假设我有一张这样的桌子

ID   Point   x     y     z
---  ----   ---   ---   ---
1     A      3     2     1    
2     B      1     3     2
3     C      2     4     1
4     D      1     3     3
5     E      5     1     2

我想得到最接近N的点,在(x,y,z) = (1,2,3)
为了得到最近点,我们需要欧氏距离公式。
比如说,[(N(x)-data(x))^2 + (N(y)-data(y))^2 + (N(z)-data(z))^2]的平方根
如何使查询包含欧几里德距离公式以选择所需的行?

最佳答案

只需使用order bylimit

select t.*
from table t
order by power(x - 1, 2) + power(y - 2, 2) + power(z - 3, 2)
limit 1;

如注释中所述,实际上不需要平方根,因为顺序是相同的。
顺便说一下,您可以将计算结果放入select中,这样您就可以返回距离:
select t.*,
       sqrt(power(x - 1, 2) + power(y - 2, 2) + power(z - 3, 2)) as distance
from table t
order by distance
limit 1;

08-04 13:50