SQL:半径(纬度/经度)内结果集的平均值
SQL: Average from result set within a radius (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
但是结果是空的。
结果应如下所示:
average = 185
感谢您的帮助。
您正在以 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
过滤行。然后然后合计价格。
我正在尝试根据给定的纬度和经度获取半径范围内的总平均价格。
我试过这样的事情:
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
但是结果是空的。 结果应如下所示:
average = 185
感谢您的帮助。
您正在以 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
过滤行。然后然后合计价格。