Как сделать математический расчет в MySQL?
Допустим, у меня есть такой стол
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]
Как сделать так, чтобы запрос содержал евклидову формулу расстояния для выбора нужных мне строк?
1 ответ
Решение
Просто используйте 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;