【问题标题】:How to make nested select statement in postgis如何在postgis中制作嵌套选择语句
【发布时间】:2021-06-01 06:50:28
【问题描述】:

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

【问题讨论】:

  • 别名bufferedZoneGeometryAsText 在您的查询中不存在并且您的小提琴不会执行。你能解决这个问题吗?
  • @JimJones 问题已修改
  • geom 的列从何而来?外部查询没有此列
  • geom??那在哪里?
  • @JimJones geom?那在哪里?

标签: python postgresql postgis


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2011-06-05
    相关资源
    最近更新 更多