2016-05-14 14 views
0

私は、Id、緯度(DOUBLE)、経度(DOUBLE)、価格(DOUBLE)約40kエントリの列を持つmysqlテーブルを持っています。今度は、特定の近隣(例えば半径5 km)内のエントリの数と、この近隣の平均価格を計算する必要があります。 だから、結果が形にする必要があります:MYSQLの各行の隣接エントリの数

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

..

私は固定小数点の一定距離内の隣人を見つけるために、サークル距離の公式を使用することができますが、私はすべての行に対してこれをどのように行うことができます? 代わりに、mysql GISまたはPythonを使用するソリューションもOKです。

ありがとうございます!

答えて

0

すでにあなたのdistancefunctionを持っているので、greatcircledistance()それを呼び出すことができます、すべての行のためにこれを行うにはかなり簡単です:速い許容されるべきである40Kのエントリについては、

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; 

(あなたがでそれを最適化することができます座標が十分に近い場合は正確な距離を計算するだけです)。ジオメトリデータと空間インデックスを使用すると、これが最も重要になります。