2016-05-14 5 views
0

У меня есть таблица mysql с столбцами Id, широта (DOUBLE), долгота (DOUBLE), цена (DOUBLE) около 40 тыс. Записей. Теперь я хочу рассчитать для каждой строки, сколько записей находится в пределах определенной окрестности (например, радиус 5 км) и какая средняя цена этого района. Таким образом, результат должен быть в форме:MYSQL подсчитывает количество соседних записей для каждой строки

Id | COUNT | AVG(price) 
--------------------- 
1 | 5  | 5.9 
--------------------- 
2 | 11 | 11.2 

..

я могу использовать круг расстояния формулу найти соседей в пределах определенного расстояния от неподвижной точки, но как я могу сделать это для каждой строки ? Альтернативное решение с использованием mysql GIS или даже python тоже нормально.

Спасибо!

ответ

0

Поскольку у вас уже есть distancefunction, позволяет называть его greatcircledistance(), это довольно прямо вперед, чтобы сделать это для каждой строки:

select a.id, count(b.id), avg(b.price) 
from mytable a 
left join mytable b 
on greatcircledistance(a.latitude, a.longitude, b.latitude, b.longitude) <= 5 
group by a.id; 

Для 40k записей, которые должны быть приемлемыми быстро (вы можете оптимизировать его только вычислять точное расстояние, если координаты достаточно близки). Использование геометрических данных и пространственного индекса ускорит это, особенно.