Sql 如何基于位置接近度计算平均值
我有一个带有地理标记值(经度、纬度、值)的SQL表。该表的累积速度很快,有数千个条目。因此,查询表中某些区域的值会返回非常大的数据集 我想知道接近一个值的平均值的方法,下面是一个示例: 表:Sql 如何基于位置接近度计算平均值,sql,database,google-maps,gps,Sql,Database,Google Maps,Gps,我有一个带有地理标记值(经度、纬度、值)的SQL表。该表的累积速度很快,有数千个条目。因此,查询表中某些区域的值会返回非常大的数据集 我想知道接近一个值的平均值的方法,下面是一个示例: 表: Long lat value 10.123001 53.567001 10 10.123002 53.567002 12 10.123003 53.567003 18 10.124003
Long lat value
10.123001 53.567001 10
10.123002 53.567002 12
10.123003 53.567003 18
10.124003 53.568003 13
假设我的当前位置是10.123004,53.567004。如果我查询附近的值,我将得到值为10、12、18和13的四个RAW。如果数据集相对较小,则此方法有效。如果数据很大,我想查询sql查找取整位置(10.123、53.567),并需要sql返回类似的值
Long lat value
10.123 53.567 10 (this is the average of 10, 12, and 18)
10.124 53.568 13
这可能吗?如何根据位置对大型数据集求平均值
sql数据库首先是正确的选择吗?
按四舍五入的列分组,AVG聚合函数应该可以很好地实现这一点:
SELECT ROUND(Long, 3) Long,
ROUND(Lat, 3) Lat,
AVG(value)
FROM Table
GROUP BY ROUND(Long, 3), ROUND(Lat, 3)
根据需要添加WHERE子句进行筛选。以下是一些粗略的伪代码,可能是一个开始。您需要使用项目中使用的SQL方言为round函数提供正确的精度参数,因此请理解,我提供的第二个参数3 round是精度的小数位数,正如您最初的帖子所示
选择圆形(横向,3)、圆形(纵向,3)、平均值(值)
逐轮分组(lat,3),逐轮分组(long,3)舍入方法的问题是边界条件——当点接近边界时会发生什么
但是,对于给定点的邻域,最好使用以下内容:
select *
from table
where long between @MyLong - @DeltaLong and @MyLong + @DeltaLong and
lat between @MyLat - @DeltaLat and @MyLat + @DeltaLat
为此,您需要定义@DeltaLong和@DeltaLat
如果这是你的问题,四舍五入可以很好地进行总结。我不知道你所说的“四舍五入位置的所有数据的平均值”是什么意思。我重新写了这个问题,我希望它现在比以前更清楚,10、12和18的平均值是40/3,大约是13.3。这是打字错误还是其他意思?