python - 如何在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
解决方案
为了使用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、子查询、聚合函数、窗口函数并尝试了解它们是如何工作的。这可能看起来很多,但从长远来看它会得到回报。
推荐阅读
- javascript - vue-property-decorator:道具正在变异?
- azure - Azure DevOps 中的文件级读取权限不起作用
- excel - 匹配具有最高数字的重复项[excel公式]?
- c++ - 删除包含包含动态对象的 STL 容器的智能指针
- angular - 滚动到顶部并且标题服务在角度 6 中无法并行工作
- angular - 无法使用 firebase 和 Angular 6 列出数据
- javascript - Jquery水平图像库 - 将点击的图像保留在中间
- symfony - 在登录表单之前重定向到页面 Symfony 3.4 正在自定义侦听器中解析为 liip_imagine 路由
- android - 如果 10 秒内没有响应,如何取消 volley 请求
- python - matplotlib:使用样式“fivethirtyeight”时,如何在条形图和图例后面绘制网格线