2016-09-28 198 views
0

我试图获得由下式给出纬度和经度半径内的总平均价内设置平均。SQL:从结果的半径(纬度/经度)

我已经试过这样的事情:

SELECT avg(price) AS average, 
    (6371 * acos(cos(radians(37.3541079)) * cos(radians(ANY_VALUE(`latitude`))) * cos(radians(ANY_VALUE(`longitude`)) - radians(-121.9552356)) + sin(radians(37.3541079)) * sin(radians(ANY_VALUE(`latitude`))))) AS distance 
FROM `Rental` 
HAVING distance <= 20 

但结果是空的。 结果应该看起来像这样:

平均= 185个

感谢您的帮助。

+0

我想你应该提供更多的细节,比如表格的快照。可能我觉得你错过了一组一组。如果你提供一些样品数据,情况可以很清楚 –

回答

0

您在该MySQL扩展它的方式使用HAVING。但是因为你有AVG(),它也会发挥其正常的作用。

您将需要一个子查询或到距离测量移动到WHERE条款:

SELECT avg(price) as average 
FROM (SELECT r.*, 
      (6371 * acos(cos(radians(37.3541079)) * cos(radians(ANY_VALUE(`latitude`))) * cos(radians(ANY_VALUE(`longitude`)) - radians(-121.9552356)) + sin(radians(37.3541079)) * sin(radians(ANY_VALUE(`latitude`))))) AS distance 
     FROM `Rental` r 
    ) r 
WHERE distance <= 20; 

换句话说,计算距离。然后使用WHERE来过滤行。和然后聚合的价格。

+0

非常感谢,它现在可以工作。 – Severin