Postgres SQL如何使用group by并在其中排除order by子句

时间:2018-12-18 03:55:57

标签: sql postgresql group-by distinct postgresql-9.5

我创建了一个类似的帖子,并认为我有答案,但我没有。我想做的是在给定位置栏与众不同的情况下,根据给定的纬度和经度来获取最近的城市/城镇。如果您在下面的屏幕快照中看到两次弹出了Orlando的位置,那么我想使该列与众不同,以便它可以忽略第2条Orlando记录。给定(28.458414,-81.395258)的点,我正确地获得了最近的城市/城镇。问题是,我有许多大城市的记录,这些大城市在同一城市中具有不同的坐标,如果您看到我对奥兰多2条记录的坐标略有不同。任何建议都很好。我正在使用postgres 10

SELECT location,ABS(28.458414 - latitudes) + ABS(-81.395258-longitudes) as distance FROM zips 
 group by location,latitudes,longitudes
 ORDER BY distance asc limit 5

我也做过

SELECT distinct location, ABS(28.458414 - latitudes) + ABS(-81.395258-longitudes) as distance FROM zips 
 ORDER BY distance asc limit 5

这用于向用户显示城镇附近的选项,并且两次显示2个城镇/城市看起来是错误的。

enter image description here

1 个答案:

答案 0 :(得分:1)

不确定您要忽略奥兰多的第二条记录。如果有一个ID列指示行的顺序,则可以使用row_number()DISTINCT ON获得最高或最低的结果。您可以尝试使用MINMAX,从group by删除经纬度

SELECT location,MIN(distance) as distance
FROM
(
  SELECT location, ABS(28.458414 - latitudes) + ABS(-81.395258 -longitudes )
   as distance FROM zips 
 ) group by location
 ORDER BY distance asc limit 5;
相关问题