#python #postgresql #postgis
Вопрос:
У меня есть этот запрос, как показано в файле скрипки. Я хотел бы добавить утверждение select внутри инструкции select в коде. Оператор select, который я хотел бы добавить, это:
SELECT array_agg(ST_X(geom)),array_agg(ST_Y(geom))
FROM ST_DumpPoints('POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))');
Я хотел бы добавить это после XOfLowerLeftOfGridCellIntersectingWithBufferedZone
,
как этого можно достичь?
файл скрипки:
https://dbfiddle.uk/?rdbms=postgres_12amp;fiddle=190e18c8f41deee45e53e2f5d8d846ab
Комментарии:
1. псевдоним
bufferedZoneGeometryAsText
не существует в вашем запросе, и ваша скрипка не выполняется. Не могли бы вы это исправить?2. @JimJones вопрос изменен
3. Откуда взялась эта колонка
geom
? Во внешнем запросе нет этого столбца4. геом?? где это?
5. @JimJones геом? где это?
Ответ №1:
Для того, чтобы использовать array_agg
, вам нужно group by
что-то, иначе вы соберете всю свою таблицу. Учитывая, что вы хотите сгруппировать столбец XOfLowerLeftOfGridCellIntersectingWithBufferedZone
по gid
В вашем случае это было бы что-то вроде
SELECT
gid,-- mind that it is also in the group by clause.
array_agg(ST_X(XOfLowerLeftOfGridCellIntersectingWithBufferedZone)),
array_agg(ST_Y(XOfLowerLeftOfGridCellIntersectingWithBufferedZone))
FROM t
GROUP BY gid
ДЕМОНСТРАЦИЯ: db<>fiddle
Примечание: Я настоятельно рекомендую вам вернуться к чертежной доске. Ваш запрос большой и полон избыточных операторов, что является побочным эффектом простого объединения отдельных запросов без надлежащего рефакторинга. Хорошо, если это просто упражнение на то, на что способен PostGIS, но вряд ли это лучший подход. Взгляните на CTE, подзапросы, агрегированные функции, оконные функции и попытайтесь понять, как они работают. Это может показаться большим, но в долгосрочной перспективе это окупится.