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