如何根据另一列中的唯一值创建数组列 SQL
How to create array column based on unique values in another column SQL
我有来自 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"
如何根据服务器列中的唯一条目正确创建数组列?
array_agg()
怎么样?
select server, array_agg(database) as databases, array_agg(contact) as contacts
from t
group by server;
如果数组中的值需要唯一,请使用 distinct
。
我有来自 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"
如何根据服务器列中的唯一条目正确创建数组列?
array_agg()
怎么样?
select server, array_agg(database) as databases, array_agg(contact) as contacts
from t
group by server;
如果数组中的值需要唯一,请使用 distinct
。