Postgres SQL Как я могу использовать group by и исключить в нем order by - PullRequest
0 голосов
/ 18 декабря 2018

Я создал похожий пост и подумал, что у меня есть ответ, но я этого не сделал.То, что я хотел бы сделать, это получить ближайшие города / населенные пункты с определенными широтой и долготой, в то же время делая столбец местоположения отличным.Если вы видите на моем скриншоте ниже, как дважды появляется Орландо, я бы хотел выделить этот столбец, чтобы он мог игнорировать 2-ю запись Орландо.Я получаю ближайшие города / населенные пункты правильно, учитывая точку (28,458414, -81,395258).Проблема в том, что у меня много записей для больших городов, имеющих разные координаты в пределах одного города, если вы видите, что у меня есть несколько разные координаты для двух записей Орландо.Любое предложение было бы здорово.Я использую 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 голосов
/ 18 декабря 2018

Не уверен, на каком основании вы хотите игнорировать вторую запись Орландо.Если бы был столбец 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;
...