我有一个PostgreSQL表,如下所示:
A -> B
A -> C
A -> G
A -> H
B -> O
B -> K
其中“->”分隔两列,其中第一列指向第二列(超链接)。现在,我想在第一列中获取所有不同的值,并为它们分配一个数组,该数组包含它们在第二列中指向的所有值,从而减小索引大小并帮助我更接近我想要的位置。
因此,我希望排列一个由[多]行组成的单列结果集。如果我能调用一个类似于
arrayify(SELECT column2 FROM table WHERE column1 = 'A'
)的函数,这会让我的生活变得如此简单。有人知道吗?
谢谢
最佳答案
这取决于您使用的PostgreSQL版本。如果您使用的是最新版本(目前支持的任何版本),则可以使用array_agg(col)
例如:
select array_agg(test) from test;
array_agg
--------------------------------------------------------------------------------
-------
{4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
32,33}
(1 row)
如果您使用的是旧版本,则可能需要编写自己的array_agg aggregate或worklike。下面是一种叫做“a s_array”的方法:
CREATE AGGREGATE as_array (
BASETYPE = ANYELEMENT,
STYPE = ANYARRAY,
SFUNC = ARRAY_APPEND,
INITCOND = '{}'
);
关于sql - 垂直到水平?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/431882/