Postgres 10 sql Как сделать разные без всех столбцов - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующий запрос, который возвращает ближайшие города / населенные пункты к определенной координате, которая передается.Он вернет не более 5 записей, и я хочу только различать город и штат.В базе данных у меня есть несколько городов, повторяющих, если они большие, поэтому я хотел бы внести ясность в это и вернуть уникальный набор городов и штатов.Кроме того, некоторые города, такие как Чикаго, например, у меня есть в базе данных 4 раза, но широта и долгота немного различаются, поэтому я должен исключить широты и долготы из отдельного запроса.,Когда я запускаю этот запрос, я получаю следующую ошибку

SELECT  distinct on(city::text || ', ' || state::text), latitudes, longitudes
FROM zips 
ORDER BY ABS(28.458414 - latitudes) + ABS(-81.395258-longitudes)
limit 5

ОШИБКА: выражения SELECT DISTINCT ON должны совпадать с исходными выражениями ORDER BY LINE 1: SELECT различаются в (city :: text || ','|| state :: text) latitu ...

Я также прочитал, но не могу заставить это работать

Sql SELECT DISTINCT - Как я могувыбрать отдельную пару без учета порядка столбцов? но, похоже, это не работает

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Ясно Error. И если вы попытаетесь сначала посмотреть синтаксис, вы должны увидеть документацию от Postgresql .. Поскольку информация подробная .. Это Documentation, и я беруцитата из документации:

«Первая строка» каждого набора непредсказуема, если только ORDER BY не используется, чтобы гарантировать, что требуемая строка появляется первой

Вам нужно поставить ORDER BY столбец, который вы используете в своем DISTINCT ON.И @ 404 ответ отлично ..

0 голосов
/ 04 декабря 2018

Это именно так, как говорит ошибка.Ваши столбцы ORDER BY должны изначально совпадать с столбцами DISTINCT ON, и после этого вы можете упорядочить любые другие элементы.Итак:

SELECT  distinct on(city::text || ', ' || state::text) latitudes, longitudes
FROM zips 
ORDER BY city::text || ', ' || state::text, ABS(28.458414 - latitudes) + ABS(-81.395258-longitudes)
limit 5

Я не понимаю, почему вы бы связали эти поля, хотя в DISTINCT ON он, похоже, не служит какой-либо цели, поскольку он будет таким же «уникальным», как указаниеколонки индивидуально, что было бы более производительным.Итак:

SELECT  distinct on(city, state) latitudes, longitudes
FROM zips 
ORDER BY city, state, ABS(28.458414 - latitudes) + ABS(-81.395258-longitudes)
limit 5

Имейте в виду, что указание столбцов в DISTINCT ON не возвращает эти столбцы, поэтому ваш запрос в настоящее время будет возвращать только latitudes, longitudes без какой-либо информации о городе или штате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...