首页 > 解决方案 > 如何在postgis中制作嵌套选择语句

问题描述

我有这个查询,如小提琴文件中所示。我想在代码中的 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_12&fiddle=190e18c8f41deee45e53e2f5d8d846ab  

标签: pythonpostgresqlpostgis

解决方案


为了使用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、子查询、聚合函数、窗口函数并尝试了解它们是如何工作的。这可能看起来很多,但从长远来看它会得到回报。


推荐阅读