我完全不知道SQL数组索引做什么,索引返回类型[]
应该是什么。
我有一个3,2数组:
select ARRAY[
[1,1],
[2,2],
[3,3]];
--> {{1,1},{2,2},{3,3}}
(顺便说一下,pgadmin3说这是一个“array integer[]”,而不是“array integer[]”)。
假设我想提取第一行(索引从1开始,对吗?):
-- A
select (ARRAY[
[1,1],
[2,2],
[3,3]])[1];
--> NULL
呵呵?为什么不
{1,1}
(属于int[]
类型)。-- B
select (ARRAY[
[1,1],
[2,2],
[3,3]])[1][:];
--> {{1,1}}
... 似乎合法。但是:
-- C
select (ARRAY[
[1,1],
[2,2],
[3,3]])[1][:][1];
--> {}
为什么这和A不同?
如何从int[][(1d数组)中提取行作为int[](1d数组)。
最佳答案
如何在postgres中将int[][]中的行提取为int[]
通过聚集不受尊重的元素:
select array_agg(elem)
from unnest(array[[1,1],[2,2],[3,3]]) elem;
array_agg
---------------
{1,1,2,2,3,3}
(1 row)
你可以在这篇文章中找到更多信息:How to get the dimensionality of an ARRAY column?
如果要获取第二个子阵列:
with my_data(id, arr) as (
values
(1, array[
[1,1],
[2,2],
[3,3]]),
(2, array[
[1,1,11],
[2,2,22],
[3,3,33]])
)
select array_agg(elem)
from my_data,
unnest(arr[2:2]) elem
group by id;
array_agg
-----------
{2,2}
{2,2,22}
(2 rows)
注1。符号
[2:2]
表示从第二个元素到第二个元素的切片,因此它指向第二个子数组。注2。多维数组必须具有具有匹配维度的数组表达式。