【问题标题】:MYSQL count number of neighboring entries for each rowMYSQL 计算每行的相邻条目数
【发布时间】:2016-05-15 03:39:30
【问题描述】:

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

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

..

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

谢谢!

【问题讨论】:

    标签: mysql gis nearest-neighbor


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多