Как сделать математический расчет в 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;
Другие вопросы по тегам