[英]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
列之外創建一個數組(為清晰起見,Contact列已排除):
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.