Множественный order_by неправильно упорядочен в psql - PullRequest
0 голосов
/ 07 февраля 2019

Попытка заказа по двум столбцам в следующем запросе.Я хочу найти ближайших людей, а затем упорядочить по наивысшему рейтингу.

Однако, когда я запускаю этот запрос, он возвращает только ближайших людей и не применяет второй порядок

SELECT person.fullname, person.ranking_score ranking, ST_Distance(person.location, CAST(ST_SetSRID(ST_MakePoint(-0.1642618, 51.58763), 4326) AS geography(GEOMETRY,-1))) AS distance
FROM person
ORDER BY distance ASC, ranking DESC;

возвращает

 fullname |  ranking   |   distance    
----------+------+------------+-------
 User 1   |    2.62    | 1281.06710415
 User 2   |    5.218   | 1610.4042403
 User 3   |    3.72    | 3005.28625016
 User 4   |    2.82    | 3005.28625016
 User 5   |    6.826   | 3186.54245429

Как видите, правильный порядок применяется к расстоянию, но не к ранжированию.

РЕДАКТИРОВАТЬ:

Я ожидал, что первоначальный порядокрасстояния будет применяться, а затем следующий порядок будет применяться к этому набору результатов?

 fullname |  ranking   |   distance    
----------+------+------------+-------
 User 5   |    6.826   | 3186.54245429
 User 2   |    5.218   | 1610.4042403
 User 3   |    3.72    | 3005.28625016
 User 4   |    2.82    | 3005.28625016
 User 1   |    2.62    | 1281.06710415

1 Ответ

0 голосов
/ 07 февраля 2019

Для ваших образцов данных вы хотите упорядочить по рангу в первую очередь:

SELECT p.fullname, p.ranking_score ranking, 
       ST_Distance(p.location, CAST(ST_SetSRID(ST_MakePoint(-0.1642618, 51.58763), 4326) AS geography(GEOMETRY,-1))) AS distance
FROM person p
ORDER BY ranking DESC, distance ASC;

Я подозреваю, что в вашей реальной задаче у вас будет либо условие, ограничивающее расстояние, либо вы хотите получить определенное количествостроки ближайших людей Последний случай требует подзапроса.

...