【问题标题】:SQL: Average from result set within a radius (Latitude / Longitude)SQL:半径内结果集的平均值(纬度/经度)
【发布时间】:2017-02-06 19:49:07
【问题描述】:

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

我尝试过这样的事情:

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

感谢您的帮助。

【问题讨论】:

  • 我认为您应该提供更多详细信息,例如您的表格快照。可能我觉得您缺少 group by 子句。如果您提供一些示例数据,事情会很清楚

标签: sql coordinates average latitude-longitude


【解决方案1】:

您正在以 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 过滤行。然后然后汇总价格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2011-02-12
    相关资源
    最近更新 更多