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
获得最高或最低。使用 MIN
或 MAX
可能是您可以尝试的一个选项,从 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;
我创建了一个类似的 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
获得最高或最低。使用 MIN
或 MAX
可能是您可以尝试的一个选项,从 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;