SQL:半径内的结果集的平均值(纬度/经度)

时间:2016-09-28 17:33:35

标签: sql coordinates average latitude-longitude

我试图通过给定的纬度和经度来获得半径内的总平均价格。

我尝试过这样的事情:

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

感谢您的帮助。

1 个答案:

答案 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过滤行。并且然后汇总价格。