MYSQL计算每行的相邻条目数

时间:2016-05-14 10:35:20

标签: mysql gis nearest-neighbor

我有mysql表,其列ID为Id,纬度(DOUBLE),经度(DOUBLE),价格(DOUBLE)约为40k条目。现在我想计算每一行中某个邻域(例如半径5公里)内有多少条目以及该邻域的平均价格是多少。 所以结果应该是以下形式:

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

...

我可以使用圆距离公式在固定点的某个距离内找到邻居,但我怎样才能为每一行做到这一点? 另外一个使用mysql GIS甚至python的解决方案也可以。

谢谢!

1 个答案:

答案 0 :(得分:0)

由于你已经拥有了你的距离函数,我们可以将其称为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条目,这应该是可接受的快速(如果坐标足够接近,您可以通过仅计算精确距离来优化它)。使用几何数据和空间索引可以最大限度地提高速度。