獲取

2017-05-25 70 views
0

我這樣做帶來的平均值查詢平均值,只要距離可達90公里:獲取

SELECT avg(price),(6371 * acos(
cos(radians(-23.2632227)) 
* cos(radians(lat)) 
* cos(radians(lng) - radians(-45.9414303)) 
+ sin(radians(-23.2632227)) 
* sin(radians(lat)) 
) 
) AS distance 
FROM fcs_workers 
HAVING distance < 90 

的問題是,當我把AVG(價格)是計算平均所有登記冊,包括那些距離較遠的登記冊。如果沒有AVG(價格)的權利帶來的只有那些100公里 的距離之內,如果沒有AVG(價格):

distance 
78.82683615218286 
6.351835016010867 

與AVG(價格)

avg(price)  |distance 
76.66666666666667|78.82683615218286 

我想有平均價格,如:110

表:

id | name|price|lat  |lng 
1 |joana|100 |-23.542746 |-46.651302 
2 |maria|120 |-23.241726 |-45.883827 
3 |lucia|40 |-22.8117593|-45.1786567 

Obrigado!

回答

0

使用子查詢:

SELECT avg(price), 
FROM (SELECT w.*, 
      (6371 * acos(
cos(radians(-23.2632227)) 
* cos(radians(lat)) 
* cos(radians(lng) - radians(-45.9414303)) 
+ sin(radians(-23.2632227)) 
* sin(radians(lat)) 
) 
      ) AS distance 
     FROM fcs_workers 
    ) w 
WHERE distance < 90; 

其實,你也可以保持HAVING子查詢。 。 。性能可能會有所提高,因爲它會縮小中間表的大小。