2016-09-28 2 views
0

Я пытаюсь получить общую среднюю цену в радиусе по заданной широте и долготе.SQL: Среднее от набора результатов в радиусе (широта/долгота)

Я пытался что-то вроде этого:

SELECT avg(price) AS average, 
    (6371 * acos(cos(radians(37.3541079)) * cos(radians(ANY_VALUE(`latitude`))) * cos(radians(ANY_VALUE(`longitude`)) - radians(-121.9552356)) + sin(radians(37.3541079)) * sin(radians(ANY_VALUE(`latitude`))))) AS distance 
FROM `Rental` 
HAVING distance <= 20 

Но результат пуст. Результат должен выглядеть следующим образом:

среднее = 185

Спасибо за вашу помощь.

+0

Я думаю, вы должны предоставить более подробную информацию, например, снимок вашей таблицы. Возможно, я чувствую, что вам не хватает группы по статье. Вещи могут быть очень ясными, если вы даете некоторые данные образца, пожалуйста, –

ответ

0

Вы используете HAVING так, чтобы MySQL расширил его. Но поскольку у вас есть AVG(), он также выполняет свою нормальную роль.

Вы будете нуждаться в подзапрос или переместить измерение расстояния до пункта WHERE:

SELECT avg(price) as average 
FROM (SELECT r.*, 
      (6371 * acos(cos(radians(37.3541079)) * cos(radians(ANY_VALUE(`latitude`))) * cos(radians(ANY_VALUE(`longitude`)) - radians(-121.9552356)) + sin(radians(37.3541079)) * sin(radians(ANY_VALUE(`latitude`))))) AS distance 
     FROM `Rental` r 
    ) r 
WHERE distance <= 20; 

Другими словами, вычислить расстояние. Затем используйте фильтр WHERE для фильтрации строк. И затем агрегат по цене.

+0

Огромное спасибо, сейчас он работает. – Severin