SQL如何使绝对函数正常工作

时间:2017-01-05 04:06:09

标签: sql postgresql

我正在使用Postgres并自学SQL我有一个名为Zips的表,它包含数千行,它有2列纬度和经度。我有以下坐标(-122.406417,37.785834)并且我使用查询来查找最接近的匹配对但是我的查询出了问题,因为它没有产生正确的输出,这是我的查询

SELECT city,state,latitudes,longitudes, ABS(-122.406417-longitudes +
37.785834 - latitudes) as area FROM zips  ORDER BY area  limit 5

现在这是该查询的输出

enter image description here 这是错误的输出,因为第三行应该是第一行,例如注意它在绝对函数

第三行:( - 122.406417 - -122.418)= .011583(37.7945-37.785834)= .008666总计= .202490

第一行:( - 122.406417 - -122.523)= .116583(37.9046-37.785834)= .008666总计= .235349

显然第三排旧金山低于第一排,我该如何解决?我是SQL新手但确实知道第三行的差异最小。任何建议都会很棒,这是Postgres 9.6

1 个答案:

答案 0 :(得分:3)

我认为你的算术不正确:

open

和第3行类似,这与您得到的结果一致。我想要你想要的是

<script type="text/javascript">
    var obj= @Html.Raw(Json.Encode(Model));
    function dosomething(obj){}
</script>

或更准确地说,如果您想按距离排序:

area = ABS(-122.406417-longitudes + 37.785834 - latitudes)

Row 1:  area = ABS(-122.406417- (-122.523) + 37.785834 - 37.9046)
             = ABS(0.116583 + -0.118766)
             = ABS(-0.002183)
             = 0.002183