我有mysql表,其列ID为Id,纬度(DOUBLE),经度(DOUBLE),价格(DOUBLE)约为40k条目。现在我想计算每一行中某个邻域(例如半径5公里)内有多少条目以及该邻域的平均价格是多少。 所以结果应该是以下形式:
Id | COUNT | AVG(price)
---------------------
1 | 5 | 5.9
---------------------
2 | 11 | 11.2
...
我可以使用圆距离公式在固定点的某个距离内找到邻居,但我怎样才能为每一行做到这一点? 另外一个使用mysql GIS甚至python的解决方案也可以。
谢谢!
答案 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条目,这应该是可接受的快速(如果坐标足够接近,您可以通过仅计算精确距离来优化它)。使用几何数据和空间索引可以最大限度地提高速度。