Вертикально по горизонтали? - PullRequest
1 голос
/ 11 января 2009

У меня есть таблица PostgreSQL, которая выглядит так:

A -> B
A -> C
A -> G
A -> H
B -> O
B -> K

Где "->" разделяет два столбца, где первый указывает на второй (гиперссылки). Теперь я хотел бы взять все отдельные значения в первом столбце и назначить им Массив, содержащий все значения, на которые они указывают во втором столбце, тем самым уменьшив размер индекса и помогая мне приблизиться к тому месту, куда я хочу попасть.

Следовательно, я хочу ARRAYify набор результатов с одним столбцом из [много] строк. Если бы я мог вызвать функцию типа arrayify(SELECT column2 FROM table WHERE column1 = 'A'), это сделало бы мою жизнь такой легкой.

Кто-нибудь или кто-нибудь знает?

Thx

1 Ответ

1 голос
/ 17 марта 2013

Это зависит от того, какую версию 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 или аналогичный. Вот способ написать файл с именем as_array:

CREATE AGGREGATE as_array (
        BASETYPE = ANYELEMENT,
        STYPE = ANYARRAY,
        SFUNC = ARRAY_APPEND,
        INITCOND = '{}'
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...