Postgresql, как сделать отбор в базе выбора по значению в основном выборе - PullRequest
1 голос
/ 28 сентября 2019

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

SELECT p.*, 
                ST_AsGeoJSON(p.coordinate) as coordiantes,
                (
                    SELECT json_agg(op.id) AS otherplaces
                    FROM places op 
                    GROUP BY op.coordinate, op.id
                    ORDER BY coordinate <-> st_geogfromwkb(p.coordinate) 
                    LIMIT 5
                ) AS other
                FROM places p
                WHERE id = 1 

Как видите, я хотел бы получить значение вызова other , где будет массив результата (id, name) для подвыбора.

Но теперь я получил ошибку.«op.coordiante» должен присутствовать в группе по .Когда я добавил это выражение, я получил другую ошибку.«Больше, чем возврат одной строки в подвыбор».

Так как это сделать правильно?

Спасибо

1 Ответ

2 голосов
/ 28 сентября 2019
SELECT p.*, 
                ST_AsGeoJSON(p.coordinate) as coordiantes,
                (
                    SELECT json_agg(foo.id) AS otherplaces
                    FROM
                      (
                        SELECT op.id
                        FROM places op 
                        ORDER BY coordinate <-> st_geogfromwkb(p.coordinate) 
                        LIMIT 5
                      ) AS foo
                ) AS other
                FROM places p
                WHERE id = 1 
...