Как сделать вложенную инструкцию select в postgis

#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, подзапросы, агрегированные функции, оконные функции и попытайтесь понять, как они работают. Это может показаться большим, но в долгосрочной перспективе это окупится.