2016-05-14 32 views
0

我有列表Id,緯度(DOUBLE),經度(DOUBLE),價格(DOUBLE)約40​​K條目的MySQL表。現在我想計算每一行中某個社區(例如5公里範圍內)有多少條目,以及該社區的平均價格是多少。 所以結果應該是形式:MYSQL計數每行相鄰條目的數量

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

..

我可以使用圓距離公式爲固定點的一定距離內找到鄰居,但我怎麼能做到這一點的每一行? 替代使用MySQL GIS甚至python的解決方案也可以。

謝謝!

回答

0

既然你已經有了distancefunction,讓我們把它叫做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項,這應該是可以接受的快(您可以通過優化它只有在座標足夠接近時才計算精確距離)。然而,使用幾何數據和空間索引將最顯着地提高速度。