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

Postgres SQL How can I use group by and exclude the order by clause in it

我创建了一个类似的 post 并认为我找到了答案,但我没有。我想做的是在给定特定纬度和经度的情况下获得最近的 cities/towns,同时使位置列 distinct 。如果您可以在我下面的屏幕截图中看到 Orlando 的位置弹出两次,我想让该列与众不同,以便它可以忽略 2nd Orlando 记录。鉴于 (28.458414,-81.395258) 的点,我得到了最近的 cities/towns 。问题是我有许多大城市的记录,但在同一个城市中坐标不同,如果您看到我的 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 towns/cities 两次看起来是错误的。

不确定您要忽略奥兰多第二项记录的依据是什么。如果有一个 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;