MYSQL 计算每行的相邻条目数

MYSQL count number of neighboring entries for each row

我有 mysql table 列 ID、纬度 (DOUBLE)、经度 (DOUBLE)、价格 (DOUBLE) 大约 40k 个条目。现在我想为每一行计算某个社区(例如 5 公里半径)内有多少条目以及该社区的平均价格是多少。 所以结果应该是这样的形式:

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

..

我可以使用圆距离公式来查找固定点一定距离内的邻居,但如何对每一行执行此操作? 使用 mysql GIS 甚至 python 的替代解决方案也可以。

谢谢!

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