我正在try 在PostgresSQL中查询arrays中的array_agg个特定元素.

以下是当前代码:

with t as (
    select 
        influence_region_id,
        ir.city_id, 
        array[c2.lat, c2.lng] as center_latlng,
        array_agg(array[c.lat, c.lng] order by "index") as path
    from influence_regions_coordinates irc 
    join coordinates c 
        on c.id = irc.coordinate_id
    join influence_regions ir 
        on ir.id = irc.influence_region_id
    join coordinates c2 
        on c2.id = ir.center 
    group by influence_region_id, ir.city_id, center_latlng
)
select * from t;

这将产生:

enter image description here

由于center_latlng是一个简单的数组,我可以使用以下方法访问它:

select influence_region_id, center_latlng[1] from t;

然而,如果我try 同样的path,也就是arraysarray_agg,我总是得到NULL

select influence_region_id, path[1] from t;

enter image description here

我试着用了path[1.1],unnest(path),但都没有用.

#

因为它是数组的数组,所以我希望做path[1]并得到另一个数组作为结果,例如[-30.45555,56.77888]

谢谢

推荐答案

如果你不介意分一块,你可以用path[1:1][:].Demo:

select (array[array['a1','b1'],
              array['a2','b2']] )[1:1][:];
array
{{a1,b1}}
select (array[array['a1','b1'],array['a2','b2']])[1][1];
array
a1

值得一提的是:

如果任何维度被写为切片,即包含冒号,则所有维度都被视为切片.

为了避免与非切片的情况混淆,最好对所有维度使用切片语法,例如,[1:2][1:1],而不是[2][1:1].

From the doc:

如果数组本身或任何下标表达式为空,则数组下标表达式将返回空值.此外,如果下标超出数组边界,则返回NULL(这种情况下不会引发错误).例如,如果schedule当前具有维度[1:3][1:2],则引用schedule[3][3]将生成空值.同样,一个数组引用的是wrong number of subscripts yields a null,而不是错误.

如果数组本身或任何下标表达式为空,则数组切片表达式同样会生成空值.但是,在其他情况下,例如 Select 完全超出当前数组边界的数组切片,切片表达式将生成空(零维)数组,而不是NULL.(这与非切片行为不匹配,这是出于历史原因.)如果请求的切片与数组边界部分重叠,则它将静默减少到仅重叠区域,而不是返回NULL.

如果你正在处理几何图形,考虑PostGIS,这样你就可以省go 管理、索引和处理它们的麻烦了.

Postgresql相关问答推荐

计算两个子查询之间的差异

为什么Postgres优化器切换到嵌套循环进行连接?

Postgres 对 WHERE 子句并行使用两个索引

从网址获取第一个字符串

如何展平也在关系中使用的区分大小写的列

如何将 grafana 与 Google Cloud SQL 集成

PostgreSQL:please specify covering index name是什么意思

使用 RPostgreSQL 进行 UTF-8 / Unicode 文本编码

如何将 postgres 数据库转换为 sqlite

Rails 重置所有 Postgres 序列?

Psycopg2 使用占位符插入表格

如何为查询执行设置语句超时

Postgres 外键on update和on delete选项如何工作?

适配器 Ecto.Adapters.Postgres 未编译

Postgresql:备份所有表 struct ,但只备份少数数据表

如何将 CSV 数据插入 PostgreSQL 数据库(远程数据库)

如何使用 sql 或 phpPgAdmin 更改 PostgreSQL 数据库的数据库编码?

如何在 postgres 查询中排名

ruby on rails jsonb 列默认值

PostgreSQL - 如何将数字字段中的秒数转换为 HH:MM:SS