Как создать столбец массива на основе уникальных значений в другом столбце SQL - PullRequest
0 голосов
/ 19 февраля 2019

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

Server    |    Database    | Contact 

server1   |    db1         | contact 1
server1   |    db2         | contact 2
server1   |    db3         | contact 3 
server2   |    db1         | contact 4
server2   |    db2         | contact 3

Но мне нужно преобразовать их, чтобы перейти к представлению внешнего интерфейса в следующем формате:

Server    | Database        | Contact 

server1   | {db1, db2, db3} | {contact1, contact2, contact3}
server2   | {db1, db2}      | {contact3, contact4} 

Для каждого уникального значения в столбце Server я хочу создать столбец массива из каждого другого столбца в моем запросе SQL.Пока что у меня есть что-то вроде этого, но похоже, что он не создает массив из столбца Server (столбец Контакт исключен для ясности):

SELECT     "table1"."Server"
            COALESCE( NULLIF( array 
           ( 
                  select DISTINCT x 
                  FROM   unnest( array_agg(DISTINCT "table1"."Server") ) x 
                  WHERE  x IS NOT NULL ), '{}' ), '{"No Data"}' ) AS "serverList" , 
           COALESCE( NULLIF( array 
           ( 
                  SELECT x 
                  FROM   unnest( array_agg(DISTINCT "table1"."Database") ) x 
                  WHERE  x IS NOT NULL ), '{}' ), '{"No Data"}' ) AS "databseList"
FROM       "table1"                                     
GROUP BY   
           "table1"."Server"

Как правильно создать столбцы массива из уникальныхзаписи в столбце Сервер?

1 Ответ

0 голосов
/ 19 февраля 2019

Как насчет array_agg()?

select server, array_agg(database) as databases, array_agg(contact) as contacts
from t
group by server;

Если значения должны быть уникальными в массивах, используйте distinct.

...