我有一个这样构造的表:
oid | identifier | value
1 | 10 | 101
2 | 10 | 102
3 | 20 | 201
4 | 20 | 202
5 | 20 | 203
我想查询此表以获得如下结果:
identifier | values[]
10 | {101, 102}
20 | {201, 202, 203}
我想不出办法做到这一点。那可能吗 ?如何 ?
非常感谢你。
最佳答案
这是自几个版本以来内置的 Postgres,因此您不再需要定义自己的,名称为 array_agg()
。
test=> select array_agg(n) from generate_series(1,10) n group by n%2;
array_agg
--------------
{1,3,5,7,9}
{2,4,6,8,10}
(这是 Postgres 8.4.8)。
请注意,没有指定
ORDER BY
,因此结果行的顺序取决于使用的分组方法(此处为散列),即未定义。例子:test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
?column? | array_agg
----------+--------------
1 | {1,3,5,7,9}
0 | {2,4,6,8,10}
test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
text | array_agg
------+--------------
0 | {2,4,6,8,10}
1 | {1,3,5,7,9}
现在,我不知道为什么你会得到
{10,2,4,6,8}
和 {9,7,3,1,5}
,因为 generate_series()
应该按顺序发送行。关于sql - 使用 PostgreSQL 上的 SQL 连接数组中的多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/533256/