2015-07-12 2 views
1

Допустим, у меня есть таблица вроде этогоКак сделать математический расчет в 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)

Чтобы получить ближайшую точку, нам нужно евклидово расстояние формулу. Скажем, squareroot [(N(x)-data(x))^2 + (N(y)-data(y))^2 + (N(z)-data(z))^2]

Как мне выполнить запрос содержит формулу евклидова расстояния, чтобы выбрать строки, которые я хочу?

+0

вам не нужно, чтобы минимизировать квадратный корень, можно только минимизировать сумму квадратов, так как это даст вы самая близкая точка .. – amdixon

+0

не могли бы вы написать запрос о своем предложении? – rfa

+0

см. @Gordon Linoff s ответ – amdixon

ответ

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; 
+0

является синтаксисом синтаксиса sql для pow? хорошо я попробую. Спасибо за ответ. – rfa

+0

@rfa. , , MySQL поддерживает как 'pow()', так и 'power()'. Я видел 'power()' в других базах данных, но я не помню 'pow()'. –

Смежные вопросы