假设我有一张这样的桌子
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 by
和limit
:
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;